錯誤日誌之觀察者模式

2021-09-27 05:08:05 字數 2019 閱讀 7462

星期一

情景早晨,專案組長來到身邊,「有人反映咱們的專案有bug」 「什麼bug?」 「不知道,你新增乙個日誌模組自己看記錄去。」 」...「

分析在mvc全域性過濾器中自己新增有異常過濾器。

global.asax

view code

filterconfig.cs

view code

開工建立過濾器,myexceptionfilter類

1 //因為微軟已經提供了乙個handleerrorattribute類(它其實也是繼承了iexceptionfilter),所以我們只需繼承它即可

2 public class myexceptionfilter: handleerrorattribute

3 17 }

loghelper類,用來把錯誤寫到日誌裡面去

view code

把自己的過濾器註冊到全域性

view code

自定義錯誤測試

ok,大功告成,以後就可以根據日誌來找錯誤了。

星期二情景

早晨,專案組長又來到小身邊,」昨天我用了你的錯誤日誌功能,還不錯,但是你將日誌寫在檔案中整理不是太方便,還存在共享衝突問題,你改下寫到資料庫中「 」...「

分析檢視昨天寫的**

發現此處是乙個變化點,有可能寫到檔案中,有可能寫到資料庫中,有可能......

不就是寫到不同的地方麼,簡單,多型就能搞定了。

開工依賴於抽象,而不依賴於具體

建立iwritelog介面

view code

建立writelogtotext類實現介面,用來寫入文字

view code

建立writelogtosqlserver類實現介面,用來寫入資料庫

view code

對變化點進行修改

1 threadpool.queueuserworkitem(o=>

11 });

ok,大功告成,又可以去美滋滋了...

星期三情景

早晨,專案組長再一次來到小身邊,」經過我的思考,我覺得把錯誤資訊同時寫到文字和資料庫中比較好「 」為什麼?「 「需求」 「...」

分析

錯誤資訊有可能要寫到不同的地方,而且不知道有多少地方,說不定明天又加了乙個redis、後天再加乙個....

這時候我們可以考慮建立乙個集合來儲存都需要寫到那些地方去。(這裡插一句:設計模式只是一種思想,實現方式肯定是不唯一的,但是思想是精髓,不能說這個**是這個模式,換一種方式實現就不是這個模式了。)

然後依次寫入即可。

開工對loghelper進行修改鄭州不孕不育醫院:鄭州不孕不育醫院哪家好:鄭州不孕不育醫院排行:

1 public class loghelper

2 27 }

28 });

29 }

32 //給外部提供方法,將錯誤資訊寫入佇列

33 public static void write(string exceptionstring)

39 }

40 }

後期如果還需要寫入其它地方或者去掉乙個的話,只需要add乙個或者刪除一行即可。當然,現在的**還有很多可優化的地方,比如把通知者(loghelper)進行抽象,還可以通過配置檔案加反射再次解耦。這裡就不做過多介紹了。因為已經星期四了...

星期四採用log4net

總結觀察者模式又叫發布-訂閱模式,定義了一種一對多的依賴關係,讓多個觀察者同時監聽同乙個物件。當物件狀態發生改變時,通知所訂閱的觀察者。

什麼時候使用?

當乙個物件改變同時需要改變其他物件,並且還不知道要改變多少物件。這時應該考慮觀察者模式。

c 之觀察者模式

以下均摘自 大話設計模式 這本書,供大家一起學習和交流,感謝作者。觀察者模式又叫做發布 訂閱模式 其定義了一種一對多的依賴關係,讓多個觀察者物件同時監聽某乙個主題物件。這個主題物件狀態發生變化時,會通知所有觀察者物件,使它們能夠自動更新自己。觀察者模式結構圖 subject類,可翻譯為主題或者抽象統...

HEAD FIRST 之觀察者模式

定義了物件之間的一對多依賴,當乙個物件改變狀態時,它的所有依賴者都將會收到通知並自動更新.觀察者模式形容圖 有乙個氣象觀察站,我們希望建立乙個應用,有三種佈告板 用於顯示不同的氣象資料 當氣象站獲取到最新的測量資料時,我們希望三種佈告板能實時更新.類圖設計 其中weatherdata用於獲取氣象站最...

C 之 觀察者模式

觀察者模式用途非常多,比如阿里雲的很多服務都是以觀察者模式提供的。觀察者模式 subject 主題 observer觀察者 又叫發布的訂閱模式 publish 發布 subscribe訂閱 解決的問題是一對多的一種關係,核心就是每當乙個物件改變狀態,則所有依賴於他的物件都得得到通知並自動更新。結合實...