錯誤處理機制。
面對多個web伺服器,多執行緒處理,我們想把錯誤資訊記錄到乙個txt文件中。
但是把錯誤資訊寫到記憶體是很快。寫到硬碟上就有一堆的問題。比如說讀寫慢、併發問題。
今天我們就利用這個實現錯誤處理 此文以mvc為例
註冊乙個錯誤處理機制。
mvc中自帶乙個 過濾器
filterconfig.registerglobalfilters(globalfilters.filters);
這裡面 我們看到這個過濾器
3、 開啟filterconfig.cs檔案
就寫了乙個註冊事件。我們看得到 這個是對錯誤處理機制
(當然 ,你們看到的是 handleerrorattribute 這個類)
4、所以你們可能覺得奇怪,我們來檢視myexceptionattribut的定義看一下
繼承了handleerrorattribute
這裡我把這個類的**貼一下
public class myexceptionattribute : handleerrorattribute
}主要是定義乙個靜態 佇列 concurrentqueue
(當然你也可以用 queue。但是微軟說 這個concurrentqueue 比 queue 安全。好像是執行緒安全的,一堆堆的理論,說白了就是用concurrentqueue 更安全)
這樣所有的錯誤就都在這個佇列裡面了。(就是記憶體)
這樣總不行吧。記憶體 斷電就沒有了的啊。
所以我們要想把資料存到 硬碟中。
5、現在又要在
內容就是執行緒池開啟乙個執行緒 從剛剛定義的 myexceptionattribute的 exceptionqueue佇列裡面取出項來。
將錯誤資訊最加到檔案後面。如果隊列為空,就執行緒停留3秒。
while (true)//注意:執行緒不能結束。後面寫到佇列中的資料沒法處理。
, filepath);
6、總結。
這個就是乙個生產者消費者的模式。
生產者就是 產生錯誤的源頭。 消費者就是註冊儲存日誌的方法。
中間有乙個倉庫就是 那個靜態錯誤佇列。
可以看到 系統產生的錯誤臨時存放於記憶體中。然後乙個新的執行緒 去讀寫靜態錯誤佇列。
正常情況 需要在錯誤佇列裡面加乙個錯誤佇列數字大於1000條的時候 發警告到郵箱的功能。那樣感覺有點問題複雜化了,畢竟這裡只是講錯誤處理。
7、log4net 我前面講過的乙個開源框架 記錄錯誤很好。
這裡提供乙個連線 log4net配置方法你可以把那個一起並到這裡。那麼就會有
改成。注意是改成:
}, filepath);
這樣就會按照你的要求把錯誤日誌記錄到
看到下圖就成功了
題外話(
沒有就自己創乙個 var s=3/0;
這樣就可以了。
牛腩 7 關於 CSS 的部分內容
css特點 實現網頁內容與樣式的分離 css選擇器優先順序 id選擇器 special 類選擇器 menu title html標籤選擇器 body css核心內容 標準流 合資模型 浮動 定位 塊級元素 行內元素 html 內容端 1 欄目一欄目二 欄目三wangchuan6688 html 內容...
關於以太坊分片 Sharding 的部分內容
結論reference 分片技術作為以太坊2.0更新的主要目標之一,是為了解決以太坊中的可拓展性問題。分片技術的核心思路是讓以太坊從網路上的每個節點都要驗證一筆交易的模式,轉型到只需要少部分節點來驗證每筆交易的模式,只要驗證每筆交易的節點足夠多,那麼整個系統就會仍是安全的。分片 的大致設計思路是 將...
關於完成埠,部分內容摘要
它之所以叫 完成 埠,就是說系統會在網路i o操作 完成 之後才會通知我們,也就是說,我們在接到系統的通知的時候,其實網路操作已經完成了,就是比如說在系統通知我們的時候,並非是有資料從網路上到來,而是來自於網路上的資料已經接收完畢了 或者是客戶端的連入請求已經被系統接入完畢了等等,我們只需要處理後面...