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

How do I defer naming of file written by log4j2 until when the file is opened?

我正在尝试让 log4j2 写入名称为 YYYYmmdd-HHMMSS.log 的日志文件,但在我们拥有良好的系统时间(> 1986 年)之前不会开始写入文件。我在启动的系统上有一个应用程序 运行,需要一段时间才能获得正确的时间;直到发生这种情况,系统认为它回到了 1970 年,并且写一个带有流浪日期的日志文件真的没有意义。

使用自定义过滤器,我可以让 FileAppender 在设置系统时间之前不写入任何事件。我可以让 FileAppender 在自定义过滤器 (createOnDemand="true") 传递第一个事件之前不打开文件。使用 Log4J2 - assigning file appender filename at runtime,我可以获得名为 YYYYmmdd-HHMMSS.log 的文件,但是配置 XML 中的 YYYYmmdd-HHMMSS.log 似乎在 log4j2 初始化时(而不是在文件已打开),所以我的文件名仍然是 19700101-000000.log.

有没有办法将对 log4j2 FileAppender 名称的评估推迟到文件实际打开时?或者,有没有偷偷摸摸的方法来使用 RollingFileAppender 来做到这一点? (我看不到更改当前文件的文件名的方法,只有旧文件)

我可以做一个自定义的 appender(FileAppender/FileManager 只是没那么长),但我会尽可能避免这种情况。

在 log4j2 邮件列表上得到了答案。感谢 Ralph Goers(log4j2 开发人员之一)。使用过滤后的 RoutingAppender 来延迟文件附加程序的创建。

https://lists.apache.org/thread.html/rbf909f616a053f8c34733801b4977f389a31169ffcdcd3748d7873df%40%3Clog4j-user.logging.apache.org%3E