有没有办法使用slf4j.Logger为特定线程发出的每条日志消息指定唯一标识符
例如,如果我在线程池中执行了10个工作线程,我希望每个线程在每个日志消息之前指定其标识符。
目前我需要写这样的东西
final String marker ="SomeIdentifier"
LOG.info("[{}] Connected to Socket: {}/{}", new Object[]{marker,ipAddr,port});
==> output
INFO - [pool-1-thread-1] [SomeIdentifier] Connected to Socket: rtdevslo2/7777
有没有推荐的方法使用slf4j和log4j做到这一点?
答案 0 :(得分:0)
如果您使用线程池执行程序,最简单的方法是将a custom ThreadFactory提供给您自定义线程名称的线程池。
例如,Executors
中的大多数工厂方法都提供此选项(example)。
典型实施:
private final ExecutorService executor = Executors.newCachedThreadPool(new ThreadFactory() {
private final AtomicInteger threadId = new AtomicInteger();
@Override
public Thread newThread(Runnable r) {
return new Thread(r, "Socket Thread Pool - Thread # " + threadId.incrementAndGet());
}
});