我使用log4j 2.9
我在log4j2.xml中配置了文件追加器。
例如:
all_log_appender, device_appender, sql_appender
所有appender都会登录不同的文件。
在运行时选择我的appender以确定记录位置(在哪个文件中)的正确方法是什么?
老实说,我无法在文档中找到示例。我也是tried to extend Logger class,但据我所知it's not correct to extend log4j2 logger class因为"有些布局需要Log4j来遍历堆栈跟踪,以报告来自记录器的代码中的哪个类和行是从"
我无法找到在runtiime中如何选择appender的任何示例。
你能给我一个简单的例子吗?
答案 0 :(得分:3)
这可以通过使用Log4j2内置的Routing Appender在配置中完成(无需自定义代码)。
此appender可以将日志事件路由到一组预定义的appender,也可以根据需要动态添加新的appender。 This stackoverflow answer包含示例和其他示例的链接。
手册页有三个示例,但the FAQ page(“如何动态写入单独的日志文件?”)有一个示例,它使用ThreadContext
映射来控制后续事件的日志文件(在当前线程中)登录到。 (另请参阅StackOverflow上的this example。)
代替ThreadContext,也可以(see LOG4J2-1015)基于日志事件标记进行路由,因此应用程序可以基于每个事件指定事件被路由到哪个文件追加器。有关基于标记进行路由的示例,请参阅this StackOverflow answer。