log4j 2 RollingFile没有滚动

时间:2017-04-20 14:48:45

标签: java tomcat7 log4j2

我们在Tomcat容器上运行WAR部署,这些容器使用log4j 2.5来记录事件。我们现在修改了部署' log4j2.xml配置让日志文件每24小时翻转一次,但是,使用这种新配置,文件的翻转不会像我们预期的那样发生。

示例配置:

    <RollingFile name="file"
        fileName="${sys:catalina.base}/logs/${web:contextPath}.log" 
        filePattern="${sys:catalina.base}/logs/${web:contextPath}-%d{dd-MMM-yyyy}.log"
        append="true">
        <PatternLayout pattern="%d{dd-MMM-yyyy HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" >
            <header>LOG START DATE=${date:dd-MMM-yyyy HH:mm:ss.SSS} APP=${web:contextPath} TOMCAT=${env:HOSTNAME}:${env:CONNECTOR_PORT}${sys:line.separator}</header>
            <footer>LOG END DATE=${date:dd-MMM-yyyy HH:mm:ss.SSS} APP=${web:contextPath} TOMCAT=${env:HOSTNAME}:${env:CONNECTOR_PORT}${sys:line.separator}</footer>
        </PatternLayout>
        <Policies>
            <TimeBasedTriggeringPolicy/>
        </Policies>
    </RollingFile>

为什么没有进行翻转的任何想法?

注意:相同的配置但使用<CronTriggeringPolicy schedule="0 0 0 * * ?" />代替TimeBasedTriggeringPolicy会进行翻转,但在这种情况下,翻转的文件会在今天的文件名中创建,而不是昨天和#39; s date。

注意2:我们有其他类似配置的部署,每24小时进行一次翻转,但这些配置的文件名是硬编码的,而不是${web:contextPath}。这个查找可能与RollingFile可能不起作用的原因有关吗?

---编辑---

更新:当Tomcat实例在Windows上运行时,我们能够使用上述配置来获取TimeBasedTriggeringPolicy来翻转文件,但是当Tomcat实例在Linux上运行时,我们能够使用以上配置。

1 个答案:

答案 0 :(得分:0)

您的配置代码段没有任何问题,因为我获得了基于时间的滚动所需的行为。 为了测试,我将dd-MMM-yyyy更改为dd-MMM-yyyy-HH-mm,我的日志文件每分钟都会滚动一次。

它必须是妨碍您实现理想行为的其他因素。

我的设置#1:

  • Log4j2 v2.8.2
  • Apache Tomcat 8.5.13
  • Windows 7 Enterprise SP1

我的设置#2:

  • Log4j2 v2.5
  • Apache Tomcat 7.0.77
  • CentOS 7(1611)

我在WEB-INF / lib中有以下3个JAR:

  • 的log4j-API-2.5.jar
  • log4j的核-2.5.jar
  • 的log4j的web-2.5.jar

以下是我的完整log4j2.xml供您参考:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="DEBUG">
    <Appenders>
        <RollingFile name="RollingFileAppender"
            fileName="${sys:catalina.base}/logs/${web:contextPath}.log" 
            filePattern="${sys:catalina.base}/logs/${web:contextPath}-%d{dd-MMM-yyyy-HH-mm}.log"
            append="true">
            <PatternLayout pattern="%d{dd-MMM-yyyy HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" >
                <header>LOG START DATE=${date:dd-MMM-yyyy HH:mm:ss.SSS} APP=${web:contextPath} TOMCAT=${env:HOSTNAME}:${env:CONNECTOR_PORT}${sys:line.separator}</header>
                <footer>LOG END DATE=${date:dd-MMM-yyyy HH:mm:ss.SSS} APP=${web:contextPath} TOMCAT=${env:HOSTNAME}:${env:CONNECTOR_PORT}${sys:line.separator}</footer>
            </PatternLayout>
            <Policies>
                <TimeBasedTriggeringPolicy/>
            </Policies>
        </RollingFile>
    </Appenders>
    <Loggers>
        <Logger name="root" level="debug" additivity="false">
            <appender-ref ref="RollingFileAppender" level="debug"/>
        </Logger>
        <Root level="debug" additivity="false">
            <AppenderRef ref="RollingFileAppender"/>
        </Root>
    </Loggers>
</Configuration>