Common.Logging是Apache下的一個開源日誌接口組件,主要用於切換不一樣的日誌庫,由於當前流行的日誌庫有不少向log4j、log4net(log4j的.net版本)等等,因此爲了能靈活的切換不一樣的日誌組件以適應不一樣的系統(在系統的迭代過程當中),因此設計了Common.Logging這個組件,下面廢話很少說開始解析這個組件。
html
一、架構分析web
首先大體瀏覽了下這個組件的架構編程
Common.Logging.Core多線程
Common.Logging架構
觀察文件類型發現如下兩點:函數
(1)、整個組件採用面向接口編程post
(2)、抽象工廠,爲了解耦必然會採用工廠,經過工廠返回接口(固然這是次要的緣由,主要的仍是全部的不一樣的日誌實例是相關或者相互依賴的對象)url
(3)、必然有一個Manager做爲主接口.net
(2)、(3)點若是不明白請參考抽象工廠(AbstractFactory)模式-建立型模式線程
二、(LogManager)主接口分析
所謂主接口,就是客戶端經過這個類操做日誌實例,因此這個類就肩負了全部的初始化工做,下面開始分析LogManager作了哪些初始化工做,以及大體的順序是怎麼樣的?
(1)、初始化配置文件閱讀器
經過靜態構造函數初始化配置文件閱讀器實例,關於爲何要用靜態構造函數,主要是爲了解決多線程的問題,由於web應用程序是多線程的因此經過靜態構造函數能解決多線程的問題,編譯器會給它加鎖。
DefalutConfigurationReader.cs --這個類默認採用的是去讀Web.config文件的方法來讀取日誌以及日誌接口的配置
當編譯器執行ConfigurationManager.GetSection()方法時,會觸發ConfigurationSectionHandler類的
這個方法回去讀取配置文件從而生成LogSetting實例。
ok,到這一步,就經過構造函數設置徹底局的配置文件閱讀器實例,下面經過
就能調用配置文件閱讀器實例了,這個實例並不包含配置文件的信息,只是存有如何讀取配置文件的方法
(2)、生成日誌實例工廠類
經過這個屬性來建立日誌實例工廠類
(3)、開發接口給外部方法
經過這三個方法就能夠經過日誌實例工廠類來獲取對應的日誌實例!
ok,整個(LogManager)主接口分析完畢!