使用log4j2的多个线程的不同日志文件

我正在运行一个Java应用程序,我在其中调用多个线程,每个线程都有一些唯一的名称。 现在我想为每个日志文件创建多个日志文件,日志文件的名称应该作为线程名称。 这可能是使用log4j2。 请帮我写log4j2配置文件。

先谢谢你。

这可以使用RoutingAppender完成。 FAQ页面有一个很好的示例配置。

我同意RoutingAppender是要走的路。 我最初将路由appender与$ {ctx:threadName}查找结合使用,其中’ctx’使用ThreadContext。 我发现我必须在代码中撒上这样一行:

ThreadContext.put("threadName", Thread.currentThread().getName()); 

虽然该代码有效,但在代码设计中却无法扩展。 如果我要在代码库中添加一个新的java.lang.Runnable ,我还必须包含该行。

相反,解决方案似乎是实现’org.apache.logging.log4j.core.lookup.StrLookup’并使用PluginManager注册@Plugin像这样:

类: ThreadLookup

 package my.logging.package import org.apache.logging.log4j.core.LogEvent; import org.apache.logging.log4j.core.config.plugins.Plugin; import org.apache.logging.log4j.core.lookup.StrLookup; @Plugin(name = "thread", category = StrLookup.CATEGORY) public class ThreadLookup implements StrLookup { @Override public String lookup(String key) { return Thread.currentThread().getName(); } @Override public String lookup(LogEvent event, String key) { return event.getThreadName() == null ? Thread.currentThread().getName() : event.getThreadName(); } } 

配置:log4j2.xml(配置的packages属性使用PluginManager注册@Plugin