




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、關(guān)于面向(min xin)切面編程的部分內(nèi)容-錯誤處理機制(jzh)錯誤處理機制(jzh)。面對多個web服務(wù)器,多線程處理,我們想把錯誤信息記錄到一個txt文檔中。但是把錯誤信息寫到內(nèi)存是很快。寫到硬盤上就有一堆的問題。比如說讀寫慢、并發(fā)問題。今天我們就利用這個實現(xiàn)錯誤處理 此文以MVC為例1、首先要在 golable 文件的 protected void Application_Start()注冊一個錯誤處理機制。MVC中自帶一個 過濾器FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);這里面 我們看到這個過濾器2、其實就是
2、在 app_Start文件夾下面 的 FilterConfig.cs 文件3、 打開(d ki)FilterConfig.cs文件(wnjin)就寫了一個注冊事件。我們看得到 這個(zh ge)是對錯誤處理機制(當(dāng)然 ,你們看到的是 HandleErrorAttribute 這個類)4、所以你們可能覺得奇怪,我們來查看MyExceptionAttribut的定義看一下繼承了HandleErrorAttribute這里我把這個類的代碼貼一下publicclassMyExceptionAttribute:HandleErrorAttribute/privatestaticobjectobj=new
3、object();publicstaticConcurrentQueueExceptionQueue=newConcurrentQueue();/定義隊列/在該方法中捕獲異常。/publicoverridevoidOnException(ExceptionContextfilterContext)base.OnException(filterContext);Exceptionex=filterContext.Exception;/捕獲(bhu)異常信息。/將異常信息(xnx)寫到隊列中。ExceptionQueue.Enqueue(ex);/跳轉(zhuǎn)到錯誤(cuw)頁面.filterContex
4、t.HttpContext.Response.Redirect(/Error.html);主要是定義一個靜態(tài) 隊列 ConcurrentQueue(當(dāng)然你也可以用 Queue。但是微軟說 這個ConcurrentQueue 比 Queue 安全。好像是線程安全的,一堆堆的理論,說白了就是用ConcurrentQueue 更安全)這樣所有的錯誤就都在這個隊列里面了。(就是內(nèi)存)這樣總不行吧。內(nèi)存 斷電就沒有了的啊。所以我們要想把資料存到 硬盤中。5、現(xiàn)在又要在 golable 文件的 protected void Application_Start()中注冊一個消費線程(這句話后面會解釋,看不懂
5、就繼續(xù))就是在 protected void Application_Start()中加入這些代碼,最好放最前面。內(nèi)容就是線程池開啟一個線程 從剛剛定義的 MyExceptionAttribute的 ExceptionQueue隊列里面取出項來。將錯誤信息最加到文件后面。如果(rgu)隊列為空,就線程停留3秒。stringfilePath=Server.MapPath(/Log/);ThreadPool.QueueUserWorkItem(a)=while(true)/注意(zh y):線程不能結(jié)束。后面寫到隊列中的數(shù)據(jù)沒法處理。/這里可以(ky)加一條if(MyExceptionAttrib
6、ute.ExceptionQueue.Count()0)/發(fā)送郵件到管理員if(MyExceptionAttribute.ExceptionQueue.Count()0)/Exceptionex=MyExceptionAttribute.ExceptionQueue.Dequeue();/從隊列中取出數(shù)據(jù).Exceptionex=null;boolisResult=MyExceptionAttribute.ExceptionQueue.TryDequeue(outex);if(ex!=null&isResult)stringfullPath=filePath+DateTime.Now.ToSt
7、ring(yyyy-MM-dd)+.txt;File.AppendAllText(fullPath,ex.ToString();/ILoglogger=LogManager.GetLogger(errorMsg);/logger.Error(ex.ToString();elseThread.Sleep(3000);elseThread.Sleep(3000);/避免(bmin)造成CPU的空轉(zhuǎn)(kngzhun)。,filePath);6、總結(jié)(zngji)。這個就是一個生產(chǎn)者消費者的模式。生產(chǎn)者就是 產(chǎn)生錯誤的源頭。 消費者就是注冊保存日志的方法。中間有一個倉庫就是 那個靜態(tài)錯誤隊列??梢钥吹?/p>
8、 系統(tǒng)產(chǎn)生的錯誤臨時存放于內(nèi)存中。然后一個新的線程 去讀寫靜態(tài)錯誤隊列。正常情況 需要在錯誤隊列里面加一個錯誤隊列數(shù)字大于1000條的時候 發(fā)警告到郵箱的功能。那樣感覺有點問題復(fù)雜化了,畢竟這里只是講錯誤處理。7、log4net 我前面講過的一個開源框架 記錄錯誤很好。這里提供一個連接 HYPERLINK /jixinyu12345/p/4859301.html log4net配置方法你可以把那個一起并到這里。那么就會有把protected void Application_Start()中添加 的代碼改成。注意是改成:log4net.Config.XmlConfigurator.Config
9、ure();/開始一個線程,查看異常隊列stringfilePath=Server.MapPath(/Log/);ThreadPool.QueueUserWorkItem(a)=while(true)/注意:線程不能結(jié)束。后面(hu mian)寫到隊列中的數(shù)據(jù)沒法處理。if(MyExceptionAttribute.ExceptionQueue.Count()0)/Exceptionex=MyExceptionAttribute.ExceptionQueue.Dequeue();/從隊列(duli)中取出數(shù)據(jù).Exceptionex=null;boolisResult=MyExceptionA
10、ttribute.ExceptionQueue.TryDequeue(outex);if(ex!=null&isResult)stringfullPath=filePath+DateTime.Now.ToString(yyyy-MM-dd)+.txt;/File.AppendAllText(fullPath,ex.ToString();ILoglogger=LogManager.GetLogger(errorMsg);logger.Error(ex.ToString();elseThread.Sleep(3000);elseThread.Sleep(3000);/避免(bmin)造成CPU的空
11、轉(zhuǎn)(kngzhun)。,filePath);這樣(zhyng)就會按照你的要求把錯誤日志記錄到app_data文件夾下面。(前提是你有未處理的錯誤 。呵呵)看到下圖就成功了題外話(沒有就自己創(chuàng)一個 var s=3/0;這樣就可以了。)【編輯推薦】 HYPERLINK /art/201506/478685.htm t _blank Java 垃圾回收機制概念梳理 HYPERLINK /art/201506/481224.htm t _blank Java 9許愿清單:請賜予我們更理想的垃圾回收機制 HYPERLINK /art/201508/487231.htm t _blank 深入分析Java線程中斷機制 HYPERLINK /
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度草原雇傭放羊與生態(tài)旅游合作合同
- 南充經(jīng)濟開發(fā)區(qū)投資集團有限公司2024年招聘筆試參考題庫附帶答案詳解
- 交通法學(xué)概論(山東聯(lián)盟)知到智慧樹章節(jié)測試課后答案2024年秋山東交通學(xué)院
- 2025年安慶市大觀控股集團有限公司校園招聘3人筆試參考題庫附帶答案詳解
- 2025年中儲糧集團紀(jì)檢監(jiān)察組招聘(4人)筆試參考題庫附帶答案詳解
- 邊牧撫養(yǎng)知識培訓(xùn)課件
- 2025中聯(lián)重科開封工業(yè)園招聘280人筆試參考題庫附帶答案詳解
- 寵物行業(yè)知識培訓(xùn)課件
- 中醫(yī)面部知識培訓(xùn)課件下載
- 2025年上半年佛山市順德區(qū)大良街道招考工作人員易考易錯模擬試題(共500題)試卷后附參考答案
- 新版高中物理必做實驗?zāi)夸浖捌鞑?(電子版)
- 華師大版八年級下數(shù)學(xué)教案全冊
- 售后服務(wù)部部門組織架構(gòu)
- 中國慢性冠脈綜合征患者診斷及管理指南2024版解讀
- 超全讀書筆記-2萬字
- 2024年江蘇食品藥品職業(yè)技術(shù)學(xué)院單招職業(yè)技能測試題庫附答案
- 《實變函數(shù)》電子教案
- 旅游景觀文化與賞析 知到智慧樹網(wǎng)課答案
- 2024-貸款受托支付合同模板
- 柴油發(fā)電機基礎(chǔ)知識教案
- 2024年蘇州衛(wèi)生職業(yè)技術(shù)學(xué)院單招職業(yè)適應(yīng)性測試題庫及答案解析
評論
0/150
提交評論