0

有没有办法使用 slf4j.Logger 为特定线程发出的每个日志消息指定唯一标识符

例如,如果我在线程池中执行了十个工作线程,我希望每个线程在每个日志消息之前指定其标识符。

目前我需要写这样的东西

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 来做到这一点?

4

1 回答 1

0

如果您使用线程池执行器,最简单的方法是为您的线程池提供一个自定义 ThreadFactory,您可以在其中自定义线程的名称。

例如,大多数工厂方法都Executors提供此选项(示例)。

典型实现:

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());
    }
});
于 2013-01-23T16:33:18.920 回答