Log4j每天滚动catalina.out而不重启Tomcat?

Mar*_*ley 2 java log4j rotation catalina tomcat7

我正确配置Log4j时遇到问题.我希望Log4j能够在午夜时将我的catalina.out文件旋转,如下所示


:log4j.properties:

log4j.rootLogger=INFO, CATALINA

# Define all the appenders
log4j.appender.CATALINA=org.apache.log4j.DailyRollingFileAppender
log4j.appender.CATALINA.File=/var/log/tomcat7/catalina.out
log4j.appender.CATALINA.Append=true
log4j.appender.CATALINA.Encoding=UTF-8

# Roll-over the log once per day
log4j.appender.CATALINA.DatePattern='.'yyyy-MM-dd-HH-mm'.log'
log4j.appender.CATALINA.layout = org.apache.log4j.PatternLayout
log4j.appender.CATALINA.layout.ConversionPattern =%d{HH:mm:ss} %5p [%t] - %m%n
Run Code Online (Sandbox Code Playgroud)


配置完成后,我重新启动了Tomcat,所有内容都写入:

/var/log/tomcat7/catalina.out
Run Code Online (Sandbox Code Playgroud)


为了测试我的配置,我将当前日期时间更改为23:59:59:

#ls -l /var/log/tomcat7/
-rw-r--r-- 1 tomcat7 tomcat7 5840  4. May 00:00 catalina.out
Run Code Online (Sandbox Code Playgroud)


如你所见,它在午夜没有旋转...(?)

重新启动Tomcat时,它完全正常:

#ls -l /var/log/tomcat7/
-rw-r--r-- 1 tomcat7 tomcat7 5840  4. May 13:37 catalina.out
-rw-r--r-- 1 tomcat7 root    2395  4. May 00:00 catalina.out.*CURRENTDATE*.log
Run Code Online (Sandbox Code Playgroud)

甚至可以在不重启Tomcat的情况下旋转我的日志文件吗?

谢谢,马利

Aug*_*tto 9

这个问题有三种解决方案:

  1. 将写入catalina.out的默认tomcat日志外观更改为例如:slf4j,具有使用它和log4j带来的所有好处.
  2. 配置系统cron以运行tomcat日志文件的logrotate
  3. 将默认日志记录类从ConsoleAppender更改为FileAppender.

解决方案的好处:

  1. 非常灵活,因为slf4j提供了许多选项,尤其是log4j,无论如何都要使用.
  2. 简单而且不需要触摸tomcat配置.
  3. 简单的配置更改,禁用控制台输出

缺点:

  1. 需要额外的库,影响tomcat托管的所有应用程序,需要用log4j替换默认配置.
  2. cron + logrotate仅适用于linux; 在带调度程序的Windows中可能不那么简单.在Windows环境中需要额外的脚本.
  3. 仅提供带日期的简单备份.无法设置日期模式.不压缩旋转的文件.

    为解决第一个问题,说明这里
    描述的解决方案二的问题在这里
    被描述为解决第三个问题在这里

您也可以组合解决方案.例如,使用crontab通过将catalina.out更改为其他名称来创建gzip文件.我还建议离开tomcat,以便记录到catalina.out,并使用log4j将应用程序配置到不同的文件.这种方式来自tomcat的非易失性日志不会垃圾邮件.