我在我的項目中使用nlog記錄器。使用nlog記錄多個線程
我的程序根據我從sql server獲得的數據生成xml文件。我正在用PLINQ來做這件事。但是我也必須記錄跟蹤信息,以便能夠對產品環境中的特殊情況進行一些調查。
當它來自多個線程時,結果日誌看起來很糟糕。例如:
Operation 1 starded
Deserializing XXX
Operation 2 started
Deserializing XXX finished with status X
Filling XXX with data from Z
Deserializing YYY....
而且它只是爲並行度2.
我想看到的結果是這樣的:
Operation 1 starded
Deserializing XXX
Deserializing XXX finished with status X
Filling XXX with data from Z
Operation 1 finished
Operation 2 started
Deserializing YYY....
我看到一些解決方案,但他們沒有看起來不夠好:
- 將日誌數據保存到某個緩衝區並在parralel任務結束時將其刷新 - 我將應該將上下文傳遞給所有內部方法(看起來很可怕!)。
- 添加某種preffix記錄消息,以幫助獲取某些消息的上下文 - 我必須將preffix傳遞給每個內部消息(也看起來很糟糕)。
有沒有一些乾淨的解決方案,這個問題?
我認爲記錄事件的實際順序對於錯誤檢測實際上可能是有價值的,因爲多線程環境中的典型錯誤當然是某些意料之外的事件順序。但是爲什麼不在日誌消息前添加一個線程名稱/ ID?日誌記錄可以通過線程中的接口(無論如何這是一個好主意)引導,這可以將前綴添加到實際消息中。這樣,您可以始終對日誌進行後期處理,以便一起查看與特定線程相關的所有消息。 –
我認爲緩衝是一種值得懷疑的記錄策略,因爲導致災難性錯誤的事件可能永遠不會寫入日誌。 –
你可以將所有的日誌寫入併發隊列,然後在不同的線程上出隊? – Enigmativity