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

2022-09-03 02:54:30

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

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

在不更改Web应用程序的情况下,有没有办法为每个应用程序获取唯一的日志文件,这些应用程序对日志文件大小有某种类型的限制?

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

谢谢

格雷格


答案 1

更新:在阅读更多内容后,我现在明白了你的观点。“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

答案 2

编辑:刚刚意识到你想要每个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>

推荐