2014-06-24 55 views
0

我的應用程序偵聽隊列上的消息,然後將結果發佈到Tibco主題。我們已經寫了一個消息監聽器,通過「MessageMes​​sage」方法調用線程標識未顯示在日誌中

我正面臨的問題是日誌中的所有線程都顯示相同的線程名稱,即"TIBCO EMS Session Dispatcher (21367271)"。它使得跟蹤哪個線程正在做什麼非常困難。

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

我需要做些什麼才能獲得正確的線程ID?

編輯:

我希望能夠對不同打印的消息的處理的日誌消息之間進行區分。目前我不能用線名來做這件事。

+0

這是正確的模式標籤。是否有很多線程會通過代碼記錄您記錄的任何消息? –

+0

是什麼讓你覺得這不是執行線程的名字? –

+0

我在隊列中收到多條消息,這意味着多個線程將進行處理。現在我需要的方式來區分這些多個線程打印的日誌。目前我無法區分。這是否解釋了這個問題? – Lokesh

回答

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()); 
+1

感謝格雷格,這應該解決我的問題。 – Lokesh