如何在SL4J日志消息中为每个线程指定唯一标识符

时间:2013-01-23 16:30:38

标签: java logging slf4j

有没有办法使用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做到这一点?

1 个答案:

答案 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());
    }
});