java - 在运行时更改 Log4J2 输出文件

标签 java logging log4j2

我正在尝试将 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/

相关文章:

java - 数组编程 - N 个玩家的 Tic Tac Toe nxn 板

c# - 防止来自外部包 .NET 的控制台日志记录

java - Spring Boot Log4j2 配置日志大小维护问题

java - 避免循环切换序列的麻烦

java - 验证没有分隔符的 UUID "-"

logging - 在磁盘上实现固定大小的日志文件或循环缓冲区

python - 用于记录的重复包装函数

java - log4j2:模式不包含日期

java - 如何在 log4j2 中以编程方式更改 Appender 布局?

java - 错误 : "javax.servlet.ServletException: Failed to load test suite [SampleTest], Reason is [Class not found "SampleTest"] "