Java 日志文件中的数据与相应文件名中的时间戳之间的时间差异
我从使用属性文件的Java 日志文件中的数据与相应文件名中的时间戳之间的时间差异,java,log4j2,Java,Log4j2,我从使用属性文件的log4j切换到使用xml,最后切换到log4j2, 因为我想在日志文件上加时间戳 <RollingFile name="File" fileName="log/${name}.log" filePattern="log/${name}-%d{dd-MM-yyyy_HH.mm.ss}.log"> <PatternLayout pattern="${pattern}" />
log4j
切换到使用xml,最后切换到log4j2
,
因为我想在日志文件上加时间戳
<RollingFile name="File" fileName="log/${name}.log"
filePattern="log/${name}-%d{dd-MM-yyyy_HH.mm.ss}.log">
<PatternLayout
pattern="${pattern}" />
<Policies>
<OnStartupTriggeringPolicy>false</OnStartupTriggeringPolicy>
<SizeBasedTriggeringPolicy size="100 MB" /> <!-- Or every 100 MB -->
</Policies>
</RollingFile>
name-19-07-2013_13.10.58.log:包含首次运行的数据
19-07-2013 13:00:10.788 [main] INFO main.App (App.java:60)
Trying to print string!
19-07-2013 13:00:10.794 [main] INFO main.App (App.java:61)
Be aware!
19-07-2013 13:00:10.795 [main] INFO main.App (App.java:63)
String printed
19-07-2013 13:00:10.795 [main] DEBUG main.App (App.java:64)
Program executed!
附加数据
Run #1 started at: 19-07-2013 13:00:10
Run #2 started at: 19-07-2013 13:10:58
Run #1 log file : name-19-07-2013_13.10.58.log
Run #2 log file : name.log
如您所见,第一次运行日志的文件名取决于第二次运行的时间
起动。我觉得这很烦人,也很误导人。不可能配置任何现有的appender来完成您想要的任务 您可以使用
FileAppender
,但当它变得太大时不会滚动
满足条件后,RollingFileAppender
将始终写入fileName
,并将此文件的内容移动到具有提供模式的文件中(因此它永远不会创建具有指定模式的文件,然后再写入其中)。这意味着,从您的角度来看,文件的时间戳将始终位于文件中最后一个日志条目之后。这是故意的
要解决此问题,您必须编写自己的appender。问题出在哪里?文件名中的时间是文件推出的时间。之后不会追加新消息,因为新消息会发送到普通日志文件。问题是,当log4j2复制旧“当前”文件的内容时,它应该将该文件的创建日期设置为时间戳,而不是与包含的数据无关的较新日期。至少我想这样配置它。但我不能。文件的日期与内容无关。文件中的所有日志记录项都在文件中给定的时间戳之前。这是因为
RollingFileAppender
将当前日志文件重命名为带有时间戳(滚动)的文件,然后创建一个新的文件,其中创建了新的日志实体。您是否完整阅读了我的问题?我知道内在力学是如何工作的。我的问题在于改变它们。如果你决定写自己的附加物,请考虑把它贡献给Log4J2,这样其他人也可以使用它。
Run #1 started at: 19-07-2013 13:00:10
Run #2 started at: 19-07-2013 13:10:58
Run #1 log file : name-19-07-2013_13.10.58.log
Run #2 log file : name.log