如何在运行时选择 log4j2 Appender

gre*_*rep 1 java logging log4j log4j2

我使用log4j 2.9

我在 log4j2.xml 中配置了文件附加程序。

例如 :

 all_log_appender, device_appender, sql_appender
Run Code Online (Sandbox Code Playgroud)

所有附加程序都登录不同的文件。

在运行时选择我的附加程序以便决定在哪里(在哪个文件中)记录的正确方法是什么?

老实说,我在文档中找不到示例。我还尝试扩展 Logger 类,但据我了解, 扩展 log4j2 记录器类是不正确的,因为“某些布局要求 Log4j 遍历堆栈跟踪以报告记录器代码中的哪个类和行被调用”

我找不到任何如何在运行时选择附加程序的示例。

你能给我一个简单的例子吗?

Rem*_*pma 5

这可以通过使用Log4j2 内置的 Routing Appender在配置中完成(无需自定义代码) 。

该附加程序可以将日志事件路由到一组预定义的附加程序,也可以根据需要动态添加新的附加程序。这个 stackoverflow 答案有示例和其他示例的链接。

手册页有三个示例,但常见问题解答页面(“如何动态写入单独的日志文件?”)有一个示例,该示例使用映射ThreadContext来控制后续事件(在当前线程中)记录到哪个日志文件。(另请参阅StackOverflow 上的此示例。)

除了 ThreadContext 之外,还可以(请参阅 LOG4J2-1015)基于日志事件标记进行路由,因此应用程序可以基于每个事件指定事件路由到哪个文件附加程序。请参阅此 StackOverflow 答案,了解基于标记进行路由的示例。