我正在尝试将 Log4J2 与我的项目中的一些自定义日志记录功能集成,并在使 Log4J2 的行为与我自己的实现类似时遇到一些问题。我希望能够根据执行中发生的事件更改正在写入的日志文件(如果不存在则停止写入旧文件,仅写入新文件)。
我将举一个例子,希望能够说明我正在寻找的内容。我们启动应用程序并写入一些预定的日志文件名,但我们只是记录初步日志,因为还没有真正发生任何有趣的事情。一旦环境条件正确并且我们收到了用户输入,软件就会启动,我们希望开始记录调试信息和数据捕获。为了将初步数据与感兴趣的数据分开,我们希望将日志文件更改为一个新的日志文件,该文件的名称包含有关系统参与时环境状态的更多信息,以便更轻松地对哪些日志文件进行排序我们想要分析和后处理。
我看过关于如何完成类似事情的帖子,但它们似乎要么要求在 Log4J2 初始化之前知道新文件名(即设置系统属性),要么使用 RoutingAppender ,这似乎更接近,但似乎需要知道我们可能想要放入文件名中的所有可能值(以定义路由)。我们必须为要放入文件名中的每种环境状态(或更糟糕的是每种状态组合)定义一条路由。
有什么想法吗?
最佳答案
您可以使用 RoutingAppender 根据 ThreadContext 键/值动态创建新文件。
以下是如何执行此操作的示例: https://logging.apache.org/log4j/2.x/faq.html#separate_log_files
在该示例中,ThreadContext 映射中的 ROUTINGKEY
值决定新文件名。
关于java - 在运行时更改 Log4J2 输出文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38506727/