log4net详解---目录讲解
首先我们先看下log4net源码目录结构如下:
这里,就先简要介绍下各个目录的职责
在log4net的配置中,appender是最重要的部分,一般来说,每一种appender都表示一种日志的输出介质,如日志文件、EvengLog、数据库、控制台、邮件、ASP.NET页面等。
IAppender有一个抽象子类:AppenderSkeleton。在此抽象类中完成了IAppender的基本功能的实现,几乎所有的底层类都继承此类。AppenderCollection类是IAppender对象的集合类,方便对IAppender的集合进行维护。
每个ILogger对象需要维护着自己的IAppender集合,并向里面写入日志内容。而这些工作可以看作一个单一的职责,类AppenderAttachedImpl负责此职责。所以IAppender只是拥有AppenderAttachedImpl的一个实例作为成员变量(域)就可以了,然后通过此实例做写入日志工作。
在配置文件中必须有一个<log>节点或<root>节点,用以绑定Appender对象等信息,而若没有<root>节点,ILogger的根节点就无实际意思,而设置的<log>节点为Root的第一层子节点,此时,而其他节点就会作为<log>节点的子节点。这时<log>节点的IAppender就会覆盖Root的IAppender.而其子节点会继承<log>节点的IAppender。
Config:配置文件
log4net配置解析方案
Core:内核
log4net核心思想
DateFormatter:日期格式化
IDateFormatter为Log4net日期解析工具
Filter:过滤器
IFilter为输出Logger的过滤方案,此过滤方案是负责哪些LoggingEvent应该被处理。过滤方案是在AppenderSkeleton中被使用的,并以以职责链的模式对IFilter对象的维护和使用。
Layout:格式化的输出信息
ILayout为消息输出格式的定义类,通过此类,可以格式化输出消息的格式。此类也是在AppenderSkeleton中使用,以格式化输出文字的格式。
ObjectRenderer:对象渲染
IObjectRenderer对象及其子类用来以字符串的形式输出对象,在框架中它只有一个子类:DefaultRender,而RenderMap对象时以IObjectRenderer类型为键的映射集合。在ILoggerRepository中被调用,而IObjectRenderer对象则是在XmlHierarchyConfigurator中通过反射被创建,并保存在ILoggerRepository对象中。
Plugin:附加的操作行为
IPlugin对象是用来定义附加的操作行为,IPluginFactory负责创建IPlugin对象,在架构中特性类PluginAttribute继承IPluginFactory。所以需要通过设置程序集特性来配置IPlugin类型,并且在DefaultRepositorySelector中通过反射创建IPlugin对象并加载到ILoggerRepository对象中。
Repository:存储库
Repository 的意思是储存库,并且根据之前的分析,显然Repository模块 维护着系统中定义的ILogger,以及和Name,Assamble的对应关系,和Appender 的对应关系