【问题标题】:Log4j daily rolling catalina.out without restarting Tomcat?Log4j 每天滚动 catalina.out 而不重新启动 Tomcat?
【发布时间】:2012-05-13 22:35:24
【问题描述】:

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

提前致谢, 马利

【问题讨论】:

    标签: java log4j rotation tomcat7 catalina


    【解决方案1】:

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

    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. 仅提供带日期的简单备份。无法设置日期模式。不压缩旋转文件。

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

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

    【讨论】:

      【解决方案2】:

      是否可以在不重新启动 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 等滚动记录器进程。

      【讨论】:

        猜你喜欢
        • 2021-07-29
        • 2010-11-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-08-19
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多