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

Wil*_*ill 3 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");
}
Run Code Online (Sandbox Code Playgroud)

在上面的代码中,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 中,它包含总消息,而带有编号的文件仅包含该执行的消息。

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

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

Vic*_*nwa 5

这来晚了,但我仍在为那些可能会发现这相关的人发帖。

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

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