我正在使用OnStartupTriggeringPolicy触发将日志翻转到存档文件夹,但是存档日志始终使用1作为迭代值,重命名同一天已经存在的所有存档日志。
我可以避免完全使用OnStartupTriggeringPolicy,但是如果%i变量未正确迭代,我认为这不能从逻辑上解决问题。即使%i变量在程序运行时已针对SizeBasedTriggeringPolicy正确进行了迭代,但如果应用程序重新启动,它仍可能会重置为1,从而导致存档日志文件被覆盖。
我尝试剥离配置的各个元素并更改值,但没有看到这种行为更改。作为一种解决方法,我将小时,分钟和秒放入filePattern中,但这导致日志文件每秒滚动一次,这是不可行的。
这是我精简的log4j2.xml配置。
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
<Properties>
<Property name="LOG_DIR">C:\\logdir\\appname</Property>
<Property name="ARCHIVE">${LOG_DIR}\\archive</Property>
<Property name="PATTERN">%d [%-5level] (%t) - %m - (%c{3})%n</Property>
<Property name="MSGONLY">%m</Property>
</Properties>
<Appenders>
<RollingFile name="DFILE"
fileName="${LOG_DIR}\\appname-debug.log" append="true"
filePattern="${ARCHIVE}\\appname-debug.log.%d{yyyy-MM-dd}(%i).gz"
ignoreExceptions="false">
<PatternLayout pattern="${PATTERN}"/>
<Policies>
<OnStartupTriggeringPolicy minSize="1" />
<SizeBasedTriggeringPolicy size="10 MB" />
<TimeBasedTriggeringPolicy interval="1" modulate="true"/>
</Policies>
</RollingFile>
</Appenders>
<Loggers>
<Root level="TRACE">
<AppenderRef ref="DFILE" level="DEBUG"/>
</Root>
</Loggers>
</Configuration>
/ archive /文件夹始终只包含1个名为的压缩日志
appname-debug.log.2019-07-25(1).gz
无论我重新启动应用程序多少次。
编辑/解决方案:
filePattern中的括号以某种方式中断了迭代。删除它们解决了该问题。所以-%i.gz而不是(%i).gz。