Java 记录器不轮换日志文件

Java Logger not rotating log files

我在 RHEL 7 上使用 Tomcat 8.0.21。在我的 Java 代码中,我使用 java.util.logging.Logger.

登录到一个文本文件

永远只有一个日志文件。如果我重新启动 Tomcat 日志记录从那一刻再次开始,所有以前的日志都消失了。

我按照说明在文件名中添加了 %g here,但它只在文件名中添加了 0,并且没有发生旋转。

这是我创建 FileHandler 的代码。 strFilePath 值例如是“/tmp/mylog.log”。 LogFormatter是我自己的class.

// 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 时将时间戳添加到文件名中。我要试试看。

这不是一个完美的解决方案,但我认为当我以这种方式构建 FileHandler 时不会丢失旧日志:

FileHandler file_handler = new FileHandler(strFilePath.replace("<timestamp>", new SimpleDateFormat("yyyy-MM-dd'T'hh:mm:ss").format(new Date())));

我的文件名中有“<timestamp>”字符串,并在此处被替换。我认为只有在我重新启动 Tomcat 时才会创建新的日志文件,因此日志文件可能会变大。但这是我迄今为止最好的。

FileHandler 仅在超过限制(或无法锁定文件)时才旋转。如果您想按时间轮换文件,则必须为此编写代码。如果您只想触发旋转,那么只需在打开实际文件处理程序之前创建一个限制为零字节的一次性文件处理程序。

new FileHandler(pattern, 0, 1, false).close();