我使用以下代码配置我的日志记录。
public Boolean configureLogPath(String logPath, String level, String logComponents, int logFileSize,
int logFileCount) {
int logFileSizeInKbs = logFileSize * 1000;
Boolean result = false;
String[] splitComponents = logComponents.split(",");
for (String component : splitComponents) {
loggableComponents.add(component);
}
switch (level) {
case "info":
LOGGER.setLevel(Level.INFO);
break;
case "severe":
LOGGER.setLevel(Level.SEVERE);
break;
case "debug":
LOGGER.setLevel(Level.CONFIG);
break;
case "off":
LOGGER.setLevel(Level.OFF);
break;
default:
LOGGER.setLevel(Level.SEVERE);
}
try {
simpleFormatter = new SimpleFormatter();
logFileHandler = new FileHandler(logPath, logFileSizeInKbs, logFileCount);
logFileHandler.setFormatter(simpleFormatter);
LOGGER.setFilter(filter);
LOGGER.addHandler(logFileHandler);
result = true;
} catch (SecurityException e1) {
result = false;
LOGGER.log(Level.SEVERE, "Security exception when reading log file" + e1);
} catch (IOException e1) {
result = false;
LOGGER.log(Level.SEVERE, "IO Exception when reading log file" + e1);
}
return result;
}
但是虽然我已经在FileHandler中给出了相关参数以便轮换日志,但旧的日志文件仍然存在。这是util日志记录的行为还是我可以做什么来在旋转期间删除旧文件?
答案 0 :(得分:0)
这是util日志记录的行为还是我可以做什么来在旋转期间删除旧文件?
根据FileHandler documentation:
对于一组旋转文件,每个文件达到给定大小 限制,关闭,旋转,打开一个新文件。
如果要删除旋转的文件,则不要旋转。轮换的目标是让您可以读取旧的日志数据。
如果你真的想要旋转和删除旧文件,可以覆盖FileHandler.setOutputStream方法来监听旋转并编写自己的删除方法。
private boolean constructed;
@Override
protected synchronized void setOutputStream(OutputStream out) throws SecurityException {
super.setOutputStream(out);
if (constructed && Level.OFF.equals(super.getLevel())) { //Rotating...
deleteRotatedFiles();
}
constructed = true;
}