之前用了很多次了,觉得还是有必要总结一下。
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.
未完待续。。
来源:https://www.cnblogs.com/mosakashaka/p/12608094.html