Java Logger不会旋转日志文件

时间:2015-09-30 06:57:40

标签: java tomcat logging rhel7

我在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时添加时间戳到文件名。我试试这个。

2 个答案:

答案 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时才会创建新的日志文件,因此日志文件可能会变大。但这是我到目前为止最好的。