首页 文章

如何在运行时选择log4j2 appender

提问于
浏览
-1

我用log4j 2.9

我在log4j2.xml中配置了文件appender .

For example :

all_log_appender, device_appender, sql_appender

所有appender都登录 different 文件 .

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

说实话,我在文档中找不到示例 . 我也tried to extend Logger class但据我所知it's not correct to extend log4j2 logger class因为"some layouts require Log4j to walk the stacktrace to report which class and line in your code from the logger was called from"

我找不到任何在runtiime中选择appender的例子 .

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

1 回答

  • 3

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

    此appender可以将日志事件路由到一组预定义的appender,或者它可以在必要时动态添加新的appender . This stackoverflow answer有示例和其他示例的链接 .

    手册页有三个示例,但the FAQ page("How do I dynamically write to separate log files?")有一个示例,它使用 ThreadContext 映射来控制后续事件(在当前线程中)记录到哪个日志文件 . (另请参阅StackOverflow上的this example . )

    而不是ThreadContext,也可以(see LOG4J2-1015)基于日志事件标记进行路由,因此应用程序可以基于每个事件指定事件被路由到哪个文件追加器 . 有关基于标记进行路由的示例,请参阅this StackOverflow answer .

相关问题