Java记录器不旋转日志文件

Java记录器不旋转日志文件,java,tomcat,logging,rhel7,Java,Tomcat,Logging,Rhel7,我正在RHEL7上使用Tomcat8.0.21。在Java代码中,我使用Java.util.logging.Logger登录到一个文本文件 始终只有一个日志文件。如果我重新启动Tomcat,日志记录将从那一刻再次开始,之前的所有日志都将消失 我按照说明向文件名添加了%g,但它只向文件名添加了0,并且没有发生旋转 这是我创建文件处理程序的代码strFilePath值例如为“/tmp/mylog.log”LogFormatter是我自己的类 // Need to set format with ow

我正在RHEL7上使用Tomcat8.0.21。在Java代码中,我使用
Java.util.logging.Logger
登录到一个文本文件

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

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

这是我创建
文件处理程序的代码<代码>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); 
在我的Windows7笔记本电脑上,使用相同的代码和Tomcat版本,日志可以正常旋转

如何在RHEL服务器上启用Java
Logger
log文件旋转


编辑:我想我可以在构建
FileHandler
时将时间戳添加到文件名中。我将尝试一下。

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

FileHandler file_handler = new FileHandler(strFilePath.replace("<timestamp>", new SimpleDateFormat("yyyy-MM-dd'T'hh:mm:ss").format(new Date())));
FileHandler file\u handler=newfilehandler(strFilePath.replace(“,new-SimpleDateFormat(“yyyy-MM-dd'T:hh:MM:ss”)。格式(new-Date());

我在文件名中有“
”字符串,它在这里被替换。我认为只有在重新启动Tomcat时才会创建新的日志文件,因此日志文件可能会变大。但这是迄今为止我提出的最好的解决方案。

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

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

认真地将SLF4J与Logback一起使用。这比JUL好上千年了。你读过了吗?我不是说Tomcat日志记录,而是从我自己的Java代码中进行日志记录。据我所知,FAQ讨论的是Tomcat自己的日志记录。我会澄清一下我的问题。你能提供一些你用来设置FileHandler的代码吗?添加了一些代码和在文件名中添加时间戳的想法。如果您想查看更多代码,请告诉我。谢谢,我应该添加一个限制。缺少限制一定是原因,尽管我不确定为什么我的Windows PC上至少有某种旋转。无论如何,我认为现在我将坚持使用我的代码,该代码将时间戳添加到文件名中,以保持清晰。如果文件大小开始变得太大,我会增加限制。