提问者:小点点

如何将log4j2所写的文件的命名推迟到文件被打开的时候?


我正在尝试让log4j2写入名为yyyymmdd-hhmms.log的日志文件,但要等到我们有一个好的系统时间(>1986年)才开始写入文件。我有一个应用程序在一个系统上运行,启动后需要一段时间才能得到正确的时间;在此之前,系统会认为它回到了1970年,所以写一个带有错误日期的日志文件是没有意义的。

使用自定义筛选器,我可以让FileAppender在设置系统时间之前不写入任何事件。我可以让FileAppender在自定义筛选器(createOnDemand=“true”)传递第一个事件之前不打开文件。在运行时使用log4j2-assigning file appender filename,我可以得到名为yyyymmdd-HHMMSs.log的文件,但是配置XML中的yyyymmdd-HHMMSs.log似乎是在Log4J2初始化时(而不是在文件打开时)得到评估的,所以我的文件名仍然是19700101-000000.log。

有没有一种方法可以推迟对log4j2文件appender的名称的计算,直到文件实际打开?或者,是否有一种使用RollingFileAppender来完成此操作的秘密方法?(我看不出有什么方法可以在那里更改当前文件的文件名,只是旧文件)

我可以做一个自定义的附加器(fileappender/fileManager不是那么长),但是如果可能的话,我会尽量避免这样做。


共1个答案

匿名用户

在log4j2邮件列表上得到了答案。感谢Ralph Goers(log4j2开发人员之一)。使用筛选的RoutingAppender来延迟文件Appender的创建。

https://lists.apache.org/thread.html/rbf909f616a053f8c34733801b4977f389a31169ffcdd3748d7873df%40%3clog4j-user.logging.apache.org%3e