2

我无法正确配置 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 的情况下旋转我的日志文件吗?

在此先感谢,马利

4

2 回答 2

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 的非无关紧要的日志不会向您的日志发送垃圾邮件。

于 2013-09-05T19:28:44.290 回答
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 等滚动记录器进程。
于 2012-05-16T00:32:35.533 回答