Util日志记录不会在轮换时删除旧的日志文件

时间:2015-12-22 06:49:58

标签: java logging java.util.logging

我使用以下代码配置我的日志记录。

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日志记录的行为还是我可以做什么来在旋转期间删除旧文件?

1 个答案:

答案 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;
}