我有一个仅在硬件触发时运行的应用程序。 我们最近还添加了 log4cxx 的旧版 C++ 应用程序,用于生成日志以帮助调试罕见的生产问题。 我们当然想要每日日志文件。
事实证明我们从未获得过滚动文件。
为了调试问题,我们将其设置为按分钟而不是按天滚动。 我们发现,如果在从一分钟开始的几秒钟内调用该程序,文件就会滚动。 如果在该分钟结束后超过 5 秒被调用,则不会发生翻滚。
在测试中,程序运行大约需要 5 秒。
如果需要的话,是否可以在程序启动时让 log4 翻转文件?
即如果我们在第 6 分钟记录,然后直到第 50 分钟才再次运行,我们将在开始记录第 50 分钟之前滚动日志文件,而不是仅仅追加到第 6 分钟。
DailyRollingFileAppender
在我的情况下也不起作用(在log4cxx 0.10.0),所以我最终使用RollingFileAppender
加上TimeBasedRollingPolicy
:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
<appender name="roll" class="org.apache.log4j.rolling.RollingFileAppender">
<rollingPolicy class="org.apache.log4j.rolling.TimeBasedRollingPolicy">
<param name="FileNamePattern" value="roll.%d{yyyy-MM-dd}.log"/>
</rollingPolicy>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%p %t %c - %m%n"/>
</layout>
<param name="Append" value="true"/>
</appender>
<root>
<priority value="ALL"/>
<appender-ref ref="roll"/>
</root>
</log4j:configuration>
点是 not 来指定
<param name="file">
否则它不会滚动(而且它也无法识别原始 log4j 中的 StaticLogFileName
参数)。
尝试{
log4j.rootLogger=debug, R
# Pattern to output the caller's file name and line number.
log4j.appender.R=org.apache.log4j.DailyRollingFileAppender
log4j.appender.R.DatePattern=test-%Y-%m-%d.log
}