Common.Logging源码解析一

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)主接口分析完毕!

相关文章
相关标签/搜索