带有两个滚动文件附加器的java log4j2没有压缩其中一个
将log4j2版本2.9.1与以下log4j2一起使用。Tomcat 7.0.41上的xml
使用-Dlog4j将配置文件指定给Tomcat服务。configurationFile=construct。这两个appender由两个不同的Web应用程序使用,它们通过以下方式实例化:
Logger loggwe = Logger.getLogger("RollingFile 'name' here");
问题:这个“脱臼”的附加器卷起,但从不拉拉链
“applog”appender按预期拉链。dislog配置的其他部分(例如模式)使用正确,因此每个webapp都会相应地使用其部分。一个就是拉不动
<?xml version="1.0" encoding="UTF-8"?>
<Configuration monitorInterval="60" status="INFO">
<Appenders>
<RollingFile name="dislog" fileName="D:/DocVue/apache-tomcat/webapps/DIS/WEB-INF/logs/dis.log" filePattern="D:/DocVue/apache-tomcat/webapps/DIS/WEB-INF/logs/dis-%d{MM-dd-yy}.%i.log.zip" append="true">
<PatternLayout>
<Pattern>D %-5p %d{MM/dd/yyyy HH:mm:ss.SSS} %m [%t]:%C.%M:%L%n</Pattern>
</PatternLayout>
<Policies>
<TimeBasedTriggeringPolicy interval="1" modulate="true" />
<SizeBasedTriggeringPolicy size="10 MB" />
</Policies>
<DefaultRolloverStrategy max="9" fileIndex="max">
<Delete basePath="D:/DocVue/apache-tomcat/webapps/DIS/WEB-INF/logs">
<IfAny>
<IfLastModified age="30d" />
<IfAccumulatedFileSize exceeds="100 MB" />
</IfAny>
</Delete>
</DefaultRolloverStrategy>
</RollingFile>
<RollingFile name="applog" fileName="D:/DocVue/docvue/WEB-INF/log/docvue.log" filePattern="D:/DocVue/docvue/WEB-INF/log/docvue-%d{MM-dd-yy}.%i.log.zip" append="true">
<PatternLayout>
<Pattern>%-5p %d{MM/dd/yyyy HH:mm:ss.SSS} %m [%t]:%C.%M:%L%n</Pattern>
</PatternLayout>
<Policies>
<TimeBasedTriggeringPolicy interval="1" modulate="true" />
<SizeBasedTriggeringPolicy size="10 MB" />
</Policies>
<DefaultRolloverStrategy max="9" fileIndex="max">
<Delete basePath="D:/DocVue/docvue/WEB-INF/log">
<IfAny>
<IfLastModified age="30d" />
<IfAccumulatedFileSize exceeds="100 MB" />
</IfAny>
</Delete>
</DefaultRolloverStrategy>
</RollingFile>
<Console name="console" target="SYSTEM_OUT">
<PatternLayout pattern="%-5p %d{MM/dd/yyyy HH:mm:ss.SSS} %m [%t]:%C.%M:%L%n" />
</Console>
</Appenders>
<Loggers>
<Logger name="applog" level="info">
<AppenderRef ref="applog"/>
</Logger>
<Logger name="dislog" level="info">
<AppenderRef ref="dislog"/>
</Logger>
<Root level="info">
<AppenderRef ref="console"/>
</Root>
</Loggers>
</Configuration>
# 1 楼答案
我怀疑这个问题是由竞争条件引起的——你有两个应用程序都试图使用相同的appender,因此使用相同的日志文件
一个appender似乎正常工作,这可能是巧合——可能一个应用程序更早地登录到该appender,而第二个应用程序登录到该appender时,没有交错
当我运行一个简化的示例时,我只能通过在使用您的配置的单独JVM中同时执行两个应用程序来复制压缩日志文件的失败
需要注意的是Tomcat by default deploys web applications into the same JVM。因此,为了知道这个问题是否是由于竞争条件造成的,我已经描述了有关运行时环境的更多信息
最后,我认为如果你努力创建一个Minimal, Complete, and Verifiable Example,你可能会深入了解这个问题,它会帮助那些试图帮助你的人