java.util.logging.logger通过在日志文件名后添加数字来创建多个日志文件

时间:2015-05-13 16:01:50

标签: java logging

我在tomcat中使用java.util.logging.logger时出现了日志文件名轮换问题。

private Logger LOGGER = Logger.getLogger(MyClass.class.getName());
private FileHandler fh = null; 
Log log = new Log();

private void writeLog(String terminalId, String date_time, String msg){
    log.isExists();
    fh =  new FileHandler(log.fullPath(), true);
    fh.setLevel(Level.INFO);
    fh.setFormatter(new MyLogFormatter());
    LOGGER.addHandler(fh);

    LOGGER.setUseParentHandlers(false);
    LOGGER.setLevel(Level.INFO);
    LOGGER.info("Terminal: " + terminalId);
    LOGGER.info("Time: " + date_time);
    LOGGER.info("message: " + msg);
}

public test() {
    writeLog(mapXML.get("terminalId"), mapXML.get("date_time"), "successful");
}

在上面的代码中,log.fullPath()就像“/usr/desktop/2015-05-13.log”

多次执行test()后,多个文件,如

  

2015-05-13.log,2015-05-13.log.1,2015-05-13.log.2,2015-05-13.log.3

生成

在2015-05-13.log中,它包含总消息,而带有数字的文件仅包含该执行的消息。

我知道在每次执行test()后重新启动tomcat时,只会创建2015-05-13.log。

但是每次执行后我都无法重启tomcat。那么如何让它只生成一个日志文件?

1 个答案:

答案 0 :(得分:2)

现在已经很晚了,但我仍然会发现可能会发现这些相关内容的人。

问题是因为您在写完后没有关闭FileHandler fh。创建的第一个日志文件保持锁定状态并且不可用,因此,创建一个新文件并附加一个数字以避免冲突。

只需在fh.close();之后添加LOGGER.info("message: " + msg);即可关闭处理程序。