日志記錄123
之前用的是安裝即用的Elmah作為本系統(tǒng)的日志記錄與異常捕獲框架,但是前段時間遇到了定制化問題,客戶想看另一種表現(xiàn)形式的日志,且當(dāng)插入到數(shù)據(jù)庫中了之后,Elmah生成的記錄特別大,所以無奈只好舍棄之,然后自行實現(xiàn)。
其實日志這一塊.Net用來用去也就那么幾種選擇。我選擇了Common.Logging作為通用日志接口,后端使用了Common.Logging.NLog20與NLog作為日志實現(xiàn)。注意在配置時盡量使用異步日志,這樣即能提高性能,也能增強用戶體驗。
在選擇前者時要注意,在NuGet上還有一個名叫Common.Logging.NLog的框架,這是一個舊版本的框架,僅能配合NLog 1.0.505進行使用。如果使用最新的2.1,則會報錯。
Common Logging Could Not Load Type NLog.TargetWithLayout
我們系統(tǒng)是一個B/S系統(tǒng),所以在作日志記錄時還需要記錄訪問者IP和當(dāng)前登錄用戶名。在官網(wǎng)上我看到了${aspnet-request}這樣子的Layout,但是在實際使用是卻老是報配置錯誤,查了很久才發(fā)現(xiàn),要想使用類似于${aspnet-*}之類的占位符,還需引用NLog.Extended,但官網(wǎng)上的文檔卻什么也沒有說,真心坑爹啊!
NLog throws configuration exception on all aspnet layout renderers
我最終是將日志記錄到數(shù)據(jù)庫中。很高興NLog支持使用Oracle.Data.Access來訪問Oracle。但是插入日期時,卻報了“月份錯誤”這樣奇怪的錯。經(jīng)過查詢加上了格式化字符串后,又報“長度不夠”這樣的錯,又查了半天,原來還需在Sql語句中再作一次轉(zhuǎn)換。坑爹!
Logging to Oracle - are Version, Culture, and Public Key required?
3.0之后的NHibernate也支持將日志插入log4net之外的日志框架,只需實現(xiàn)ILoggerFactory接口與IInternalLogger接口。需要注意的是,記錄Sql語句的日志名稱為nhibernate.sql。我這里是將NH接上Common.Logging,最終使用NLog進行日志記錄。
系統(tǒng)出現(xiàn)異常時也需要記錄日志。在Asp.Net里的標準做法是實現(xiàn)一個IHttpModule接口,在里面注冊Application.Error事件捕獲系統(tǒng)異常。Elmah也是這么做的。注意在記錄日志時需try起來,失敗了不作任何處理來屏蔽日志記錄時可能產(chǎn)生的異常。

浙公網(wǎng)安備 33010602011771號