有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

带有两个滚动文件附加器的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) 个答案

  1. # 1 楼答案

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

    一个appender似乎正常工作,这可能是巧合——可能一个应用程序更早地登录到该appender,而第二个应用程序登录到该appender时,没有交错

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

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

    最后,我认为如果你努力创建一个Minimal, Complete, and Verifiable Example,你可能会深入了解这个问题,它会帮助那些试图帮助你的人