我在RHEL 7上使用Tomcat 8.0.21。在我的Java代码中,我使用java.util.logging.Logger
登录到文本文件。
始终只有一个日志文件。如果我重新启动Tomcat,则从那一刻起再次开始记录,之前的所有日志都将消失。
我按照指示here将%g
添加到文件名中,但它只将0添加到文件名中,并且不会发生轮换。
以下是我创建FileHandler
的代码。 strFilePath
值例如是" /tmp/mylog.log"。 LogFormatter
是我自己的班级。
// Need to set format with own formatter class to get plain text to one line (default format is XML).
FileHandler file_handler = new FileHandler(strFilePath);
file_handler.setFormatter(new LogFormatter());
logger.addHandler(file_handler);
在我的Windows 7笔记本电脑上,日志使用相同的代码和Tomcat版本旋转正常。
如何在RHEL服务器上启用Java Logger
日志文件轮换?
编辑:我想我可以在构建FileHandler
时添加时间戳到文件名。我试试这个。
答案 0 :(得分:1)
FileHandler仅在超出限制(或无法锁定文件)时旋转。如果要按时间旋转文件,则必须为此编码。如果您只想触发一个旋转,那么在打开实际的文件处理程序之前,只需创建一个带有零字节限制的丢弃文件处理程序。
new FileHandler(pattern, 0, 1, false).close();
答案 1 :(得分:0)
这不是一个完美的解决方案,但我认为当我以这种方式构建FileHandler
时,我不会丢失旧日志:
FileHandler file_handler = new FileHandler(strFilePath.replace("<timestamp>", new SimpleDateFormat("yyyy-MM-dd'T'hh:mm:ss").format(new Date())));
我在文件名中有“<timestamp>
”字符串,并在此处替换。我认为只有在重新启动Tomcat时才会创建新的日志文件,因此日志文件可能会变大。但这是我到目前为止最好的。