线程ID未显示在日志中

时间:2014-06-24 05:27:16

标签: java multithreading log4j jms

我的应用程序侦听队列中的消息,然后将结果发布到Tibco主题。我们编写了一个消息监听器,通过" onMessage" " MessageListener"

的方法

我面临的问题是日志中的所有线程都显示相同的线程名称,即"TIBCO EMS Session Dispatcher (21367271)"。而且很难跟踪哪个线程正在做什么。

我的log4j表达式是"%d{HH:mm:ss,SSS} %-5p %c{1} [%t] - %m%n"

我需要做些什么改变来获得正确的线程ID?

编辑:

我希望能够区分为处理不同消息而打印的日志消息。目前我不能用线程名做。

1 个答案:

答案 0 :(得分:1)

您可以随意设置主题名称。你可以这样做:

private static AtomicInteger count = new AtomicInteger(0);

public void onMessage(Message message)
{
  String oldName = Thread.currentThread().getName();
  Thread.currentThread.setName("my-thread-" + count.getAndIncrement())

  try
  {
    // ... existing code ...
  }
  finally
  {
    Thread.currentThread().setName(oldName);
  }
}

用于唯一标识线程的原子整数的替代方法是使用标识哈希码:

Thread.currentThread.setName("my-thread-" + System.identityHashCode());