java.util.logging.logger通过在日志文件名后添加数字来创建多个日志文件
在tomcat中使用java.util.logging.logger时,我遇到了日志文件名旋转的问题java.util.logging.logger通过在日志文件名后添加数字来创建多个日志文件,java,logging,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){ lo
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。那么,如何让它只生成一个日志文件呢?这已经很晚了,但我仍在为那些可能发现这一点的人发帖 问题是因为您在写入后没有关闭
FileHandler fh
。创建的第一个日志文件保持锁定且不可用,因此,将创建一个新文件并附加一个数字以避免冲突
只需添加
fh.close()代码>在LOGGER.info之后(“消息:+msg”)
关闭处理程序。处理完文件处理程序后是否关闭了该处理程序?@Vinayak Pingale否,处理完文件处理程序后我不会关闭该处理程序。@Vinayak Pingale刷新并关闭文件处理程序后,问题就解决了,谢谢。然后它会看到该文件上已经打开了一个处理程序,并打开一个新的处理程序,该处理程序的文件名后面有一个数字。您应该只有一个处理程序。首先尝试关闭文件处理程序
,然后运行它。其次,您可以使用以下构造函数来获取FileHandlerFileHandler fh=newfilehandler(“路径”+“logfileName”,0,1,false)代码>但是,我有一个静态日志实例是什么?关闭它会导致进一步的日志记录被禁用,对吗?是的,关闭文件处理程序后的日志记录将不再工作,您必须重新初始化并附加处理程序。