首页 > 代码库 > Common.Logging源码解析一

Common.Logging源码解析一

Common.Logging是Apache下的一个开源日志接口组件,主要用于切换不同的日志库,因为当前流行的日志库有很多向log4j、log4net(log4j的.net版本)等等,所以为了能灵活的切换不同的日志组件以适应不同的系统(在系统的迭代过程中),所以设计了Common.Logging这个组件,下面废话不多说开始解析这个组件。

1、架构分析

首先大致浏览了下这个组件的架构

技术分享

Common.Logging.Core

技术分享

Common.Logging

技术分享

观察文件类型发现以下两点:

(1)、整个组件采用面向接口编程

(2)、抽象工厂,为了解耦必然会采用工厂,通过工厂返回接口(当然这是次要的原因,主要的还是所有的不同的日志实例是相关或者相互依赖的对象)

(3)、必然有一个Manager作为主接口

(2)、(3)点如果不明白请参考抽象工厂(AbstractFactory)模式-创建型模式

 

技术分享

 

2、(LogManager)主接口分析

所谓主接口,就是客户端通过这个类操作日志实例,所以这个类就肩负了所有的初始化工作,下面开始分析LogManager做了哪些初始化工作,以及大致的顺序是怎么样的?

(1)、初始化配置文件阅读器

通过静态构造函数初始化配置文件阅读器实例,关于为什么要用静态构造函数,主要是为了解决多线程的问题,因为web应用程序是多线程的所以通过静态构造函数能解决多线程的问题,编译器会给它加锁。

技术分享

技术分享

DefalutConfigurationReader.cs     --这个类默认采用的是去读Web.config文件的方法来读取日志以及日志接口的配置

技术分享

当编译器执行ConfigurationManager.GetSection()方法时,会触发ConfigurationSectionHandler类的技术分享

这个方法回去读取配置文件从而生成LogSetting实例。

 技术分享

 ok,到这一步,就通过构造函数设置完全局的配置文件阅读器实例,下面通过

技术分享

就能调用配置文件阅读器实例了,这个实例并不包含配置文件的信息,只是存有如何读取配置文件的方法

 

(2)、生成日志实例工厂类

技术分享

通过这个属性来创建日志实例工厂类

技术分享

技术分享

 

(3)、开发接口给外部方法

技术分享

通过这三个方法就可以通过日志实例工厂类来获取对应的日志实例!

ok,整个(LogManager)主接口分析完毕!

 

Common.Logging源码解析一