2012-06-01 63 views
1

我有一個WCF服務,我使用Log4Net將信息記錄到Sql Server數據庫。我使用Log4Net的GlobalContext來記錄一些額外的信息,如事務名稱,狀態,消息和其他一些東西。該系統中的一些重要事務是讀取,寫入和登錄。Log4Net記錄不正確的數據

日誌應該是這樣的:

  • 「讀」 -------- 「成功」 -------- 「讀XXX客戶數據」
  • 「寫入」 --------「成功」--------「寫入xxx客戶數據」
  • 「登錄」--------「失敗」-------- 「用戶會話已經存在。」

當我運行我的正常測試 - 日誌完全寫入數據庫時​​,一切正常。但是,最近我使用JMeter進行了負載測試。上述三個事務在100個併發線程中測試了3分鐘。當我檢查數據庫日誌時,發現有些信息記錄不正確。

例:

  • 「讀」 -------- 「成功」 -------- 「用戶會話已經存在。」
  • 「寫」 -------- 「成功」 -------- 「讀XXX客戶數據」

這是log4net的GlobalContext中不是線程安全的問題嗎?我嘗試使用ThreadContext而不是GlobalContext,但看起來像很多信息沒有記錄。

+0

看起來這些消息在寫入數據庫的過程中被混淆了,因爲你併發地寫入了數據庫。您需要仔細查看調試器並檢查整個鏈。 –

+0

根據文檔,GlobalContext是線程安全的http://logging.apache.org/log4net/release/manual/contexts.html – VJAI

+0

@Mark:我已經看到了。但是,我面臨的問題迫使我思考不同! – Thomas

回答

0

LogicalThreadContext爲我做了詭計!