2010-07-08 37 views
0

我正在使用log4net,並且當我登錄消息時,我的threadID將被複制到我的文件中。我希望它是一個uniqueID,因此它在文件中永遠不會存在兩次,以便它可以輕鬆搜索。我希望這是正確的。基本上我的轉換圖案包括這些項目如何將每次執行的唯一threadID與log4net輸出關聯起來?

<conversionPattern value="%date [%hex_thread] %method %-5level %logger – %message%newline"/> 

這是我的輸出:

2010-07-08 11:12:32426 [B] methodC INFO methodC - 方法C內

2010- 11月7日至8日:12:58316 [B] methodC INFO methodC - 方法C內

2010-07-08 11:13:09284 [A] methodC INFO methodC - 方法C內

2010-07- 08 11:1 5:04,214 [B] methodC INFO methodC - 內部方法C

其中,hex_thread是我的十六進制threadID。你可以看到[B]發生了好幾次,而且它不應該執行,因爲執行時間不同。所以,我想讓它變得獨一無二。所以它的東西不會出現在那一行的任何地方。就像也許「0b87007」這樣的事情,如果我搜索它將是整個行中唯一的事件。我怎樣才能做到這一點?

編輯補充我的修復

我的threadId打印十六進制格式,所以我只是追加幾個字符像這樣的輸出....

long id = System.Threading.Thread.CurrentThread.GetHashCode(); String str = id.ToString("X"); writer.Write("0x0000"+str); 

然後輸出會是什麼樣子此

2010-07-09 10:07:37917 [0x00004] methodC INFO methodC - 消息

2010-07-0 9 10:07:37,917 [0x0000B] methodC INFO methodC - 消息

+0

請評論如果我的問題不清楚......我真的需要更快的反應。謝謝所有 – Precious 2010-07-08 05:49:41

+0

如果消息來自同一個線程,那麼它將具有相同的線程ID - 或者我錯過了什麼? – ChrisF 2010-07-08 09:09:34

+0

請不要在您的標題上添加辯護。 – 2010-07-08 09:09:44

回答

2

只要您使用相同的線程,您將擁有相同的線程ID。您需要爲每個操作創建一個新線程,併爲其分配一個唯一的ID。

從你的問題看來,你似乎想要爲日誌文件中的每一行都有一個唯一的ID。不知道你爲什麼要這樣做,但如果這是你的目標,你不應該使用線程ID,而是一些「全球計數器」...

+0

謝謝Stefan。對不起,我錯誤地問,我不想每行都有唯一的threadID。現在我想要做的就是讓我的threadID唯一,這與該行中的其他消息不同。例如,如果threadID是「A」(使用十六進制),那麼當我搜索它時,它也會在我的消息中包含任何出現的字母「A」。這是我想要防止的。我如何自己分配唯一的ID? – Precious 2010-07-08 09:21:29

+0

當你搜索[A],那麼你只會發現任何引用線程ID ...順便說一句。你的模式字符串中的[]並不需要爲「hex_thread」屬性工作,你也可以刪除它們或用別的東西替換它們 – 2010-07-08 10:12:12

+0

我的老闆請求將[]添加到threadID,這就是爲什麼我把它放在[]。我想出了一個辦法。 我發佈了自己的修補程序附加到我的問題..後給它一個長期以來我想出了非常簡單的解決方案。謝謝你的時間Stefan。 – Precious 2010-07-09 02:17:47

相關問題