節選自這裏html
日誌記錄編程主要會涉及到三個核心對象,它們分別是Logger、LoggerFactory和LoggerProvider,這三個對象同時也是.NET Core日誌模型中的核心對象,並經過相應的接口(ILogger、ILoggerFactory和ILoggerProvider)來體現。右圖所示的UML揭示了日誌模型的這三個核心對象之間的關係。編程
在進行日誌記錄編程時,咱們直接調用Logger對象相應的方法寫入日誌,LoggerFactory是建立Logger對象的工廠。由LoggerFactory建立的Logger並不真正實現對日誌的寫入操做,真正將日誌寫入相應目的地的Logger是經過相應的LoggerProvider提供的,前者是對後者的封裝,它將日誌記錄請求委託給後者來完成。ide
具體來講,在經過LoggerFactory建立Logger以前,咱們會根據需求將一個或者多個LoggerProvider註冊到LoggerFactory之上。好比,若是咱們須要將日誌記錄到EventLog中,咱們會註冊一個EventLogLoggerProvider,後者會提供一個EventLogLogger對象來實現針對EventLog的日誌記錄。當咱們利用LoggerFactory建立Logger對象時,它會利用註冊其上的全部LoggerProvider建立一組具備真正日誌寫入功能的Logger對象,並採用「組合(Composition)」模式利用這個Logger列表建立並返回一個Logger對象。spa
綜上所述,LoggerFactory建立的Logger僅僅是一個「殼」,在它內部封裝了一個或者多個具備真正日誌寫入功能的Logger對象。當咱們調用前者實施日誌記錄操做時,它會遍歷被封裝的Logger對象列表,並委託它們將日誌寫入到相應的目的地。日誌