log4net使用

之前用了很多次了,觉得还是有必要总结一下。

log4net整体设计上,分为几部分

  • logger:代表打印的输出者,即这一行打印是有谁打出来的
  • appdender:代表打印的目的地,如打印到文件/数据库/缓存/控制台等等
  • layout:代表打印的格式,可以对logger输出的内容进行格式化

 

logger

log4net的打印输出者即logger,他是有一个字符串作为名字的。在使用中常见的LogManager.GetLogger("xxx"),就是通过名字获取logger。同一个名字在整个程序中只有一个实例。

log4net打印输出定义了五个level打印等级,由低到高分别是DEBUG>INFO>WARN>ERROR>FATAL,仅当一个logger定义的打印等级,小于或等于程序中输出的打印等级时,打印才会被打出。

例如,如果一个logger定义为WARN级别,那么用log.Info()输出的内容不会被记录。

logger的命名与c#中的命名空间格式相同,以点间隔,多个层级,如X.Y.Z。

之所以采用点间隔方式,是为了对logger定义一个层次的概念如

  • 名为X.Y.Z的logger的parent是X.Y
  • 名为X.Y.Z的logger的descendant的有X和X.Y,以及root
  • root是一个特殊的层次,所有的logger都有有一个root的先祖。

有了层次关系,就能为logger定义了属性的继承关系:logger的level(打印等级)如果为定义,则继承自他最近的descendant的level。

而root级别的level有默认值,这样一来所有未定义level的logger都能有一个默认的打印等级。

Appender

appdender定义了日志输出的目的地,如文件、数据库、控制台等。

appdender不同于logger的继承方式,一个logger除了会输出到他自己层级定义的appender中,还会输出到他所有descendant定义的appender中。除非在中间某一级将“Additivity Flag”置为false(置为false的一级仍会被child继承,单他的上一级不再会被继承)。

Layout

layout定义了日志的格式化输出方式。

例如一个PatternLayout,定了输出格式为

%timestamp [%thread] %-5level %logger - %message%newline

那么输出的内容格式样例则为:

176 [main] INFO  Com.Foo.Bar - Located nearest gas station.

 

未完待续。。

posted @ 2020-03-31 20:33  mosakashaka  阅读(142)  评论(0编辑  收藏  举报