从零开始编写自己的C#框架(20)——框架异常处理及日志记录
最近很忙,雜事也多,所以開發(fā)本框架也是斷斷續(xù)續(xù)的,終于在前兩天將前面設(shè)定的功能都基本完成了,剩下一些小功能遺漏的以后發(fā)現(xiàn)再補(bǔ)上。接下來的章節(jié)主要都是講解在本框架的基礎(chǔ)上進(jìn)行開發(fā)的小巧。
?
本框架主要有四種日志記錄,分別是登陸日志、操作日志、手動收集異常日志和自動收集異常日志四種,大部分日志采集都不用開發(fā)者動手實(shí)現(xiàn),在模板與相關(guān)的功能類中已自動幫我們將所需要的日志記錄下來了。
?
登陸日志,記錄的當(dāng)然是用戶登陸、退出、在線時長的日志,主要是在登陸(Login.aspx)、后端首頁(Main.aspx,有一個退出按鈕)和在線列表(OnlineUsersList.aspx,有踢除用戶下線按鈕)等幾個頁面使用,所使用到的邏輯層函數(shù)放在LoginLogBll.cs(用戶登陸日志自定義邏輯類)與OnlineUsersBll.cs(OnlineUsersBll邏輯類)兩個文件中。登陸頁面主要是記錄用戶登陸系統(tǒng)的日志信息,而其他頁面則是記錄用戶退出系統(tǒng)的日志信息,同時記錄在線時長。當(dāng)然后端首頁有個定時器,會每分鐘更新用戶最后在線時間,以便用戶退出系統(tǒng)時(或直接關(guān)閉瀏覽器后),相關(guān)的程序能及時記錄用戶退出信息及在線時長。
?
操作日志,記錄的是用戶在后端管理系統(tǒng)中,什么時間打開了那個頁面,然后進(jìn)行的是添加、修改、刪除記錄、更新狀態(tài)、刪除圖片、踢除用戶下線......等各種操作信息。方便出現(xiàn)問題時,管理人員能快捷的查出操作人員追究對應(yīng)責(zé)任;也方便領(lǐng)導(dǎo)查看后端相關(guān)人員有沒有使用系統(tǒng),分析系統(tǒng)推廣效果(很多OA或企業(yè)管理系統(tǒng)在企業(yè)購買回來后,不少員工都很抵觸不去使用系統(tǒng),造成花了很多錢購買來的系統(tǒng)成為擺設(shè),當(dāng)然這個操作記錄并不能對這種情況的改善有很大的幫助,但至少讓相關(guān)人員知道員工對系統(tǒng)的使用情況,哈哈...)
對于操作日志的記錄,開發(fā)人員基本上不用去編寫代碼,因?yàn)樵谏傻哪0搴瘮?shù)中已全面的記錄各種操作日志,除非自定義的函數(shù)中并沒有去調(diào)用模板生成的添加、修改、刪除等函數(shù),直接使用SubSonic3.0插件接口或ADO.NET接口,那樣的話就得自己編寫代碼記錄了。而對于用戶進(jìn)入過那些頁面的記錄,由于后端系統(tǒng)開發(fā)的頁面都必須繼承PageBase類,每個后端頁面打開時,都會運(yùn)行該類的初始化函數(shù),該初始化函數(shù)中會調(diào)用CommonBll.UserRecord(this)函數(shù),忠誠的記錄下用戶的操作軌跡。
具體實(shí)現(xiàn)代碼大家可以查看邏輯層生成的模板函數(shù)類,里面所有添加、修改、刪除、更新函數(shù),都會調(diào)用UseLogBll.GetInstence().Save()這個函數(shù),記錄用戶進(jìn)行了什么樣的操作。而自定義函數(shù)想要記錄用戶操作說明,也可以直接調(diào)用這個函數(shù),寫上自定義操作說明。
?
手動收集異常日志,對于異常,有的朋友建議都將它拋出來,這樣的話容易發(fā)現(xiàn)Bug,然后進(jìn)行修復(fù),但都是這樣處理的話,用戶體驗(yàn)就會比較差,所以我一般是數(shù)據(jù)層將異常拋出來,在邏輯層或UI層將它們都捕捉起來,然后在catch塊中調(diào)用CommonBll.WriteLog("異常說明", e)把異常記錄到文件中,當(dāng)系統(tǒng)交付給使用方時,使用人員進(jìn)行某些操作時,萬一出現(xiàn)異常也只是顯示失敗或操作不了,而不會拋出黃頁,需要維護(hù)時,只要使用方將軟件或網(wǎng)站根目錄下的Data文件夾打包發(fā)給開發(fā)人員即可分析查看異常問題所在。
當(dāng)然對于那些需要非常詳細(xì)的日志記錄的程序,也可以將每一步執(zhí)行的結(jié)果調(diào)用日志函數(shù)記錄下來,方便開發(fā)人員分析問題。
對于手動收集異常的調(diào)用代碼,大家可以查看邏輯層(Solution.Logic.Managers)的SubSonic文件夾下面的模板類和UI層代碼。
?
自動收集異常日志,顧名思義就是自動記錄所有我們沒有捕捉到的異常。雖然我們上面已做了異常捕捉處理,但難免有些地方會忘記捕捉,那么我們就在全局異常處理那里將它記錄下來。我們在Global.asax文件的Application_Error()函數(shù)中進(jìn)行異常采集,收集服務(wù)器端頁面發(fā)生的所有異常,調(diào)用自定義函數(shù)ErrorLogBll.GetInstence().Save()將它們記錄到數(shù)據(jù)庫中。
?
通過以上四種日志記錄,基本上將我們需要的信息都記錄了下來,協(xié)助我們排查安全問題、排查各種錯誤。
?
解決方案下載:(本解決方案忘了將之前注釋掉的權(quán)限打開了...下次處理后再重新發(fā)出來吧)
由于框架不是非常成熟,很多朋友不是用來學(xué)習(xí)而是直接用到項(xiàng)目中,但不熟悉框架引起不少小問題,所以停止提供下載,有需要學(xué)習(xí)的可以到群共享里下,不便之處敬請諒解。
?
說明:試過有朋友將所有章節(jié)中的解決方案都使用前面測試?yán)又械臄?shù)據(jù)庫,所以一直顯示不了列表,所以查看過后才知道數(shù)據(jù)庫沒有記錄引起的......所以在這里說明一下,在開發(fā)過程中,根據(jù)需要我會對數(shù)據(jù)表或字段進(jìn)行增改操作,為了避免寫太多的更新SQL語句,所以每個章節(jié)所配的數(shù)據(jù)庫只是對應(yīng)本章節(jié),大家使用新的解決方案時就重新附加新的數(shù)據(jù)庫。大家打開數(shù)據(jù)字典就會查看到,幾乎對數(shù)據(jù)字典的每個修改我都有記錄下來,方便大家比對。
?
?版權(quán)聲明:
本文由AllEmpty原創(chuàng)并發(fā)布于博客園,歡迎轉(zhuǎn)載,未經(jīng)本人同意必須保留此段聲明,且在文章頁面明顯位置給出原文鏈接,否則保留追究法律責(zé)任的權(quán)利。如有問題,可以通過1654937@qq.com 聯(lián)系我,非常感謝。
?
發(fā)表本編內(nèi)容,只要主為了和大家共同學(xué)習(xí)共同進(jìn)步,有興趣的朋友可以加加Q群:327360708 ,大家一起探討。
?
更多內(nèi)容,敬請觀注博客:http://www.cnblogs.com/EmptyFS/
?
轉(zhuǎn)載于:https://www.cnblogs.com/EmptyFS/p/3808231.html
總結(jié)
以上是生活随笔為你收集整理的从零开始编写自己的C#框架(20)——框架异常处理及日志记录的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 使用AFNetworking 报错提示
- 下一篇: offset说明