2012-05-04 86 views
1

我在正确配置Log4j时遇到问题。我期待的Log4j像以下配置时,它在午夜转动我的catalina.out的文件..


log4j.properties:Log4j每日滚动catalina.out而不重新启动Tomcat?

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的情况下旋转我的日志文件?

由于提前, 马利

回答

8

有此问题的三种解决方案:

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

效益的解决方案:

  1. 为SLF4J提供了许多选择特别的log4j,您使用反正非常灵活。
  2. 简单并且不需要触摸tomcat配置。
  3. 禁用控制台输出

缺点配置简单的变化:

  1. 需要附加库,会影响Tomcat是托管的所有应用程序,需要与log4j的取代默认配置。
  2. cron + logrotate仅适用于linux;在调度程序的窗口中可能不那么简单。在Windows环境中需要额外的脚本。
  3. 只提供与日期简单的备份。日期图案不能设置。不压缩旋转的文件。对于第一个问题

    解决方案,描述描述here
    解决方案第二期here
    解决方案第三个问题是描述here

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

1

它甚至有可能无需重新启动Tomcat的转动我的日志文件?

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

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

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

  • 如果您使用的jsvc启动Tomcat和您使用公共守护1.0 .4或更高版本,则可以将SIGUSR1发送到jsvc进程以重新打开日志文件。这将允许你将现有的日志文件移动到另一个文件(它只是改变它的名字并继续登录到新的文件名),然后'杀死SIGUSR1':原来的文件名将被重新打开,新的日志信息将会去它。
  • 如果您使用bin/catalina.sh启动Tomcat,则可以对其进行修改,使其不再执行重定向,而是将输出管道输出到滚动记录器进程,如Apache httpd的rotatelogs或chronolog。