Log4Net日志組件經驗分享
我們在開發WEB項目的時候,經常會出現這樣的情況:在本地調試都是正常的,但是部署到服務器上就不行了。一般出現這種情況很大一部分原因是因為服務的環境和本地不同,數據庫的配置以及服務器軟件環境。如何能夠準確快速的判斷問題的所在呢?本人總結了我平時用過的三種方法。
第一:憑經驗。自己寫的程序當然對于業務邏輯會非常清楚,頁面執行到什么程度,什么地方可能會出錯,憑經驗也能猜出可能出錯的地方。這種方法依賴于程序員的經驗。
第二:讓應用程序報出黃頁,顯示具體的錯誤信息。這種方法可以非常直觀的看出程序的錯誤所在。但是如果是正式環境,程序是不可能讓出現報黃頁的情況。用戶看到錯誤黃頁對于管理者來說簡直就是一種惡夢。一般都會跳到一個自定義的錯誤頁,顯示些系統錯誤之類的信息。這種情況第二種方法就行不通了。
第三:記錄錯誤日志。利用try catch機制來捕獲錯誤信息,然后將錯誤信息記錄在日志中,供日后查找。顯然第三種方法是最佳的方式,這種方式的實現,一般分為兩種:
一種:自己寫這種記錄日志的組件。
二種:利用第三方組件,例如:log4net。
這兩種方式都是可行的,只要能夠滿足你的需求什么方式并不重要。利用第三方組件來說簡單點,這里就說了log4net的應用。這個組件在幾年前就有了,只是我并沒有用。現在在項目是發現了它的存在,才知道它的重要性。首先來說下log4net組件的優點吧:
第一:支持多種記錄日志的方式,可分為郵件形式,文本形式,數據庫存儲,等等;
第二:在大并發的情況下很好的解決了寫入同一文件的問題;
第三:可根據日期以及文件大小來生成不同的日志文件;
第四:配置相對簡單,調用也方便。
園子里面已經有不少朋友寫過log4net的文章,本人都是受教者,現在只是想更多的分享下使用log4net的經驗。可以說是對它應用的一種嘮叨吧。
要想利用log4net,我把它分為三步:
第一:在項目中引用log4net組件;
第二:配置log4net,一般都寫在web.config中;
第三:調用部分。
具體怎么配置,我不想多說,官方文檔中已經寫的太清楚了,也不是本文的重點。這里就我的經驗和大家分享下:
經驗一:配置文件不寫在web.config中;
理由:
一個項目隨著需求的變更,配置字節會特別多,不便查閱及維護。而且一但更改配置文件,就會引起IIS重啟。
解決方案:我們可以利用以下方法來實現:
log4net.Config.XmlConfigurator.ConfigureAndWatch(string filePath)
它用來加載配置文件,這個配置文件可以放在任意地方,與WEB程序完成分離,更改此文件可以避免IIS的重啟。
經驗二:寫一個調用log4net的公共類,根據不同的功能模塊來生成不同的ILog接口。
一般在項目中程序都會分成很多不同的模塊,如果所有的模塊的日志都寫在一個目錄里面,那在查閱的時候會是一種麻煩,我們可能根據不同的模塊甚至更詳細的功能來設置日志文檔的存儲路徑。例如:娛樂新聞/weblog.txt,體育新聞/weblog.txt等等。
經驗三:log4net并不一定要在程序發生錯誤時才記錄日志,你可以把程序的業務邏輯處理過程都記錄下來。
例如有一個非常復雜的業務處理,里面可能會調用webservice,第三方接口什么的,此時如果程序出錯,程序員在判斷錯誤時往往會非常困難,你可以把執行過程都記錄下來,這樣當程序出錯時你通過日志就知道在哪一步出問題了。記錄這種日志時可以用級別最低的Info來記錄,程序穩定后在配置文件中更改日志記錄級別就可以避免在程序無錯時也記錄日志的負載了。