代码改变世界

log4net

2016-10-14 12:01  昏晓  阅读(214)  评论(0编辑  收藏  举报

log4net的主要组成部分:

  1. loggers:are named entities(命名实体,他们都实现了ILog接口),用于log message.
    1. 上面用复数,也就是说可以在系统中定义多个logger(在配置文件中通过<logger />来定义),这些logger都是组织在一个“层次结构”中的,从而形成了“父子”关系,logger的父子关系是通过其名称体现的,也就是说如果一个logger的名称以另一个logger的名称作为前缀,则前者就是后者的子logger。在这个层次结构中,有一个root是自动、永远存在的。
    2. 在使用一个logger记录message之前,需要首先获得对该logger的引用,这是通过LogManager的静态方法GetLogger(logger名称)实现的;
    3. logger的级别。每个Logger会被指定一个级别,配合ILog中定义的5组方法,用于log不同级别的message,这个怎么理解呢?假如一个logger被指定的基本为warning,则通过该logger的Fetal、Error、Waring方法输出的message会被记录,但是通过低于warning的Debug、Info方法输出的message则不会被记录。就这样。
  2. appenders:是log的位置,每个log的位置被称为一个appender(他们都实现了log4net.Appenders.IAppender接口,在配置文件中通过<appender />定义),也就是说,log4net通过appender来定义输出的位置(比如输入为文件,则要定义文件名,输出到数据库,则要定义数据库连接、表名等)
    1. log4net已经预定义了很多的appender(见http://logging.apache.org/log4net/release/manual/introduction.html)。
    2. Appender需要append到某个logger上,用来定义该logger的输出位置(通过在<logger>中定义<appender-ref ref="appender名称" />实现)。
  3. layouts:用来定义输出到每个appender的message格式,所以每个appender都会有一个layout(通过在<appender>中定义<layout>实现)。同样,log4net中也预定义了多种layout.
  4. filters:用来控制appender的行为(action);
  5. object renderer:用来将object转换为字符串(以便log);

这几个部分互相作用,达到以下的目的:

  1. 根据message的类型和级别(以Log4net.Core.Level类来定义)来log这些message;
  2. 能够在运行时控制这些message的格式,以及log这些message的位置(文件、数据库等);

 log4net的配置语法:

http://logging.apache.org/log4net/release/manual/configuration.html