2011-06-21 96 views
2

我有一個使用NLog進行跟蹤的C#中的大型應用程序(> 50k loc),並且跟蹤已經有些失去控制。一些圖書館擁有適當的追蹤(正確的級別/詳細程度),其他圖書館只將所有內容發送到錯誤/信息級別。清理跟蹤

我需要清理它以使所有錯誤反映正確的嚴重性。因此,當我真的想要重新啓用一般異常跟蹤以跟蹤生產問題時,我們基本上禁用了生產跟蹤。

什麼是一個很好的工作流程來解決這個問題?是否有任何工具可以幫助您以清晰的方式追蹤所有跟蹤語句?我目前正在計劃使用更清晰,並找到所有用法,並花一些時間來解決這個問題。

更新:我在這裏並不清楚,我正在尋找一些關於一般跟蹤的良好指導方針,並且可能會提供一些關於重新調整我的大型代碼庫的建議。

+0

只是爲了清楚起見,您是否對如何查找NLog跟蹤語句的實例感興趣,或尋找一種更好的方法來記錄一般情況? – mfanto

回答

1

這是我使用(但我用log4net的,但我想它的相同)

.trace() - 是用來記錄的東西像函數的入口和出口,和巨大的datadumps

for(a in l) { trace("List contents: "+ a) } 

的.debug() - 是考慮分支何時打印的信息完整1(一)行。 您可能在單個函數中有幾條調試語句,但不是1條pr線。 當你閱讀調試語句時,它應該看起來像一個簡潔版本的
函數。

.debug("Checking if current account {} for user {} has more than {} amount", amount); 
.debug("Account criteria met for account {} for user {}; making withdrawel of {}", otheramount); 
.debug("Account {} debited by {} amount. Transaction key {}"); 

每條調試行都必須是獨立的,並且包含理解它所需的所有信息。有沒有一條線只讀「檢查帳戶級別」,因爲你的下一個問題將是哪個帳戶?什麼用戶?什麼數量?

.info() - 最多隻有1個或2個pr函數,並且只在高級作用域中。必須完成數據。

.info("Withdrawel procecss complete for account {}, user {}, for amount {}"); 

.warn() - 非嚴重錯誤,數據完整,所以你可以通過這些來一個郵件記錄器,並在一段時間檢查一次該郵箱。

.error() - 與警告相同,但更重要。用戶被阻止實現他的目標,所以你想更頻繁地查看。

.fatal() - 如果可能的話,應直接轉到sysadm的尋呼機,並提供關於服務器/機器名稱的信息。

除此之外,請確保每個類都具有基於該類的自己的記錄器,因此即使在運行時,您也可以輕鬆地爲代碼的特定區域打開和關閉日誌。