如何配置Tomcat JULI日志记录来滚动日志文件?

时间:2020-03-06 14:45:07  来源:igfitidea点击:

我有几个使用java.util.logging的webapp。 Tomcat 5.5配置为使用Juli记录器,以便每个Web应用程序都有其自己的日志文件。问题是Juli没有最大文件大小和文件数的属性。使用Juli,文件将无限制地增长,并且只会在一天结束时滚动。此外,将保留无限数量的日志文件。

我们可以在此页面上查看FileHandler属性。Apache Tomcat 5.5文档
没有限制或者计数属性(以下行不执行任何操作)
org.apache.juli.FileHandler.limit = 102400
org.apache.juli.FileHandler.count = 5`

在不更改webapp的情况下,是否有办法为每个应用程序获取唯一的日志文件,并在日志文件大小上设置某种类型的界限?

更新:
我发现的解决方案根本没有使用Juli记录器!
java.util.logging.FileHandler.limit = 102400
java.util.logging.FileHandler.count = 5

谢谢,

格雷格

解决方案

更新:阅读更多内容后,我现在看到观点。 " Tomcat的JULI实现并非旨在成为功能齐全的日志记录库,而只是通往这些库的简单桥梁。但是,JULI确实提供了一些用于配置其处理程序的属性。下面列出了这些属性。"有趣的是,他们说默认的java.util.Logging实现太受限制,然后他们通过提供一个甚至更多的实现来解决它。

FileHandler javadocs

  • java.util.logging.FileHandler.limit指定要写入任何一个文件的大约最大数量(以字节为单位)。如果为零,则没有限制。 (默认为无限制)。
  • java.util.logging.FileHandler.count指定要循环通过的输出文件数量(默认为1)。

对于每个Web应用程序一个文件,我们可能要按记录器的名称将其分开,这取决于为每个应用程序创建记录器的方式。如果它们基于包或者类名,则可以基于此过滤日志。看起来我们提供的链接上的示例告诉我们如何执行此操作

org.apache.catalina.core.ContainerBase.[Catalina].[localhost].level = INFO
org.apache.catalina.core.ContainerBase.[Catalina].[localhost].handlers = \
   2localhost.org.apache.juli.FileHandler

编辑:刚意识到我们想要每个webapp日志记录,使用此设置可能无法...

我的建议(假设我们使用的是Tomcat 6.0)是编译用于完全公共记录的额外组件,并使用Log4j来配置滚动日志。

此处的施工说明
http://tomcat.apache.org/tomcat-6.0-doc/building.html

然后将Tomcat的/ bin目录中的tomcat-juli.jar替换,并将tomcat-juli-adapters.jar与log4j.jar和log4j.properties一起放置在/ lib目录中。

然后使用类似:

<appender name="file" class="org.apache.log4j.RollingFileAppender">
  <param name="File" value="logfile.log"/>
  <param name="Threshold" value="INFO"/>
  <param name="MaxFileSize" value="10MB"/>
  <param name="MaxBackupIndex" value="3"/>
  <layout class="org.apache.log4j.PatternLayout">
    <param name="ConversionPattern" value="%d{ISO8601} %p %m%n"/>
  </layout>
</appender>