【问题标题】:log4j2 with two rollingfile appenders not zipping one of them带有两个滚动文件附加程序的 log4j2 不压缩其中一个
【发布时间】:2017-10-31 23:44:25
【问题描述】:

在 Tomcat 7.0.41 上使用 log4j2 版本 2.9.1 和以下 log4j2.xml。

使用 -Dlog4j.configurationFile= 构造将配置文件指定给 Tomcat 服务。这两个 appender 被两个不同的 webapps 使用,它们通过以下方式实例化:

Logger loggwe = Logger.getLogger("RollingFile 'name' here");

问题:“dislog”附加程序滚动但从不压缩。

“applog”附加程序按预期压缩。 dislog 配置的其他部分,例如 Pattern,被正确使用,因此每个 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>

【问题讨论】:

    标签: java zip log4j2


    【解决方案1】:

    我怀疑这个问题是由竞争条件引起的——你有两个应用程序都试图使用相同的附加程序,因此也使用相同的日志文件。

    一个appender 似乎正常工作可能是一个巧合 - 也许一个应用程序更早地记录到该appender,并且当第二个应用程序登录到该appender时,没有交错。

    当我运行一个简化的示例时,我只能通过同时执行两个应用程序来复制压缩日志文件的失败在单独的 JVM 中,这两个应用程序都使用您的配置。

    请务必注意Tomcat by default deploys web applications into the same JVM。所以为了知道这个问题是否是由于竞争条件造成的,我已经描述了更多关于你的运行时环境的信息。

    最后,我认为,如果您致力于创建 Minimal, Complete, and Verifiable Example,您可能会深入了解问题,这将有助于那些试图帮助您的人。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-04-05
      • 2021-07-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-19
      相关资源
      最近更新 更多