0

我尝试了下面的配置,发现日志轮换按预期发生,并且为每次轮换创建了一个新的日志文件。

但是,当有多个服务器实例正在运行时指向同一个日志文件。一旦日志达到限制,日志就会被备份,但不是新文件 (0KB),而是将新日志写入同一个旧文件,从而增加文件大小。

看起来在多个实例中,文件被两个实例锁定以进行写入,回滚是不正确的。

任何解决方法/建议?为每个实例创建一个新文件并不是一个真正的选择。

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="warn" name="" packages="">
    <Appenders>
        <RollingRandomAccessFile name="RollingRandomAccessFile"
            fileName="../logs/ws_new.log" append="false" filePattern=".../logs/ws_new-%d{MM-dd-yyyy}-%i.log">
            <PatternLayout>
                <Pattern>%d %p %c{1.} [%t] %m%n</Pattern>
            </PatternLayout>
            <Policies>
                <TimeBasedTriggeringPolicy />
                <SizeBasedTriggeringPolicy size="50 KB" />
            </Policies>
            <DefaultRolloverStrategy max="3"/>
        </RollingRandomAccessFile>
    </Appenders>
    <Loggers>
        <root level="error">
            <AppenderRef ref="RollingRandomAccessFile" />
        </root>

         <Logger name="org.exm.test" level="trace" additivity="false">
            <AppenderRef ref="RollingRandomAccessFile"/>
        </Logger>


    </Loggers>


</Configuration>
4

1 回答 1

1

Log4j 并非设计为以这种方式使用。如果多个进程尝试写入同一个日志文件,则无法保证结果。您最终可能会丢失日志消息。

我强烈建议您为您的进程使用单独的日志文件。

于 2013-11-11T22:21:01.253 回答