0

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 を使用してこれを行うための推奨される方法はありますか?

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 に答える