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

时间:2012-05-04 11:24:25

标签: java log4j rotation tomcat7 catalina

我无法正确配置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


配置后我重新启动了Tomcat和 一切都写到:

/var/log/tomcat7/catalina.out


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

#ls -l /var/log/tomcat7/
-rw-r--r-- 1 tomcat7 tomcat7 5840  4. May 00:00 catalina.out


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

重新启动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

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

提前致谢, 马利

2 个答案:

答案 0 :(得分:9)

此问题有三种解决方案:

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

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

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

        第一期的解决方案,描述here
        第二期的解决方案描述为here
        第三期问题的解决方案描述为here

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

答案 1 :(得分:1)

  

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

是的,如果你愿意为它工作。

你的log4j配置只会与bin / catalina.sh用于将stdout重定向到logs / catalina.out的标准shell重定向结束。您不能简单地使用log4j配置来更改System.out的行为方式。

如果你想旋转conf / catalina.out,你将不得不采取一些替代措施,具体取决于如何启动Tomcat:

  • 如果您使用jsvc启动Tomcat并且您正在使用commons-daemon 1.0.4或更高版本,那么您可以将SIGUSR1发送到jsvc进程以重新打开日志文件。这将允许您将现有日志文件移动到另一个文件(只更改其名称并继续记录到新文件名)然后执行'kill SIGUSR1':然后将重新打开原始文件名,并且新的日志消息将去吧。
  • 如果您使用bin / catalina.sh来启动Tomcat,您可以对其进行修改,使其不再进行重定向,而是将输出管道输出到滚动记录器进程,如Apache httpd的rotatelogs或chronolog。