我尝试过以下配置,发现日志轮换按预期发生,并为每次轮换创建了一个新的日志文件。
但是当有多个服务器实例正在运行时指向同一个日志文件。一旦日志达到限制,日志就会备份,但是新日志会被写入同一个旧文件,而不是新文件(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>
答案 0 :(得分:1)
Log4j不是为那种方式设计的。如果多个进程尝试写入同一个日志文件,则无法保证结果。您最终可能会丢失日志消息。
我强烈建议您为进程分配单独的日志文件。