在运行时更改Log4J2输出文件

时间:2016-07-21 14:17:33

标签: java logging log4j2

我试图将Log4J2与我的一个项目中的一些自定义日志记录功能集成,并遇到一些问题,使Log4J2的行为与我自己的实现类似。我希望能够根据执行中发生的事件更改正在写入的日志文件(如果不存在,则停止写入旧文件,仅写入新文件)。

我举一个例子,希望能说明我在寻找什么。我们启动应用程序并写入一些预定的日志文件名,但我们只是记录初步日志,因为还没有真正感兴趣的事情。一旦环境条件正确并且我们已经收到用户输入,软件就会使用,我们希望开始记录调试信息和数据捕获。为了将初步数据与有趣的数据分开,我们希望将我们的日志文件更改为新的日志文件,该文件的名称包含有关系统启用时环境状态的更多信息,以使其更容易排序我们想要分析和后处理的日志文件。

我已经看过关于如何完成类似事情的帖子,但是他们似乎要么在Log4J2初始化之前要知道新的文件名(即设置系统属性)或者使用看起来比较接近的RoutingAppender似乎需要知道我们可能想要放入文件名的所有可能值(以定义路由)。我们必须为每个环境状态定义一个路由(或者更糟糕的是,每个状态组合)我们想要放入文件名。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

您可以使用RoutingAppender根据ThreadContext键/值动态创建新文件。

以下是如何执行此操作的示例: https://logging.apache.org/log4j/2.x/faq.html#separate_log_files

在该示例中,ThreadContext映射中的ROUTINGKEY值确定新文件名。