我同意一个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().get