我们在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上运行时,我们能够使用以上配置。
答案 0 :(得分:0)
您的配置代码段没有任何问题,因为我获得了基于时间的滚动所需的行为。
为了测试,我将dd-MMM-yyyy
更改为dd-MMM-yyyy-HH-mm
,我的日志文件每分钟都会滚动一次。
它必须是妨碍您实现理想行为的其他因素。
我的设置#1:
我的设置#2:
我在WEB-INF / lib中有以下3个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>