我在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。那么如何让它只生成一个日志文件?
答案 0 :(得分:2)
现在已经很晚了,但我仍然会发现可能会发现这些相关内容的人。
问题是因为您在写完后没有关闭FileHandler fh
。创建的第一个日志文件保持锁定状态并且不可用,因此,创建一个新文件并附加一个数字以避免冲突。
只需在fh.close();
之后添加LOGGER.info("message: " + msg);
即可关闭处理程序。