Logger hierarchy (层次级别) Logger 都是已经命名的实体。 Logger 的名称区分大小写并遵循以下规则: 1 如果 A logger 的名称如果是 B logger 名称的前缀(通过“ . ”连接),则说 A logger 是 B logger 的祖父级。 2 如果 A logger 的名称和 B logger 的名称之间不存在其他的 logger 名称,则 A logger 是 B logger 的父级。 例子: A logger 名称为“ Foo.Bar ”, B logger 名称为“ Foo.Bar.Baz ”, A 为 B 的父级。名称为“ System ”的 logger 是名称为“ System.Text.StringBuilder ”的祖父级。 Root logger 位于 logger 层次级别中的顶级。它有例外的三条规则: 1 Root logger 总是存在的。 2 Root logger 不能通过名称或取。 3 Root logger 有一个默认的 Level 值为 Debug 。 Logger 可以通过 log4net.LogManager 类的静态方法 GetLogger 获取。 Level 值: ALL/DEBUG/INFO/WARN/ERROR/FATAL/OFF Level 继承规则:如果一个 logger 没有定义 Level ,它的 Level 值将从它的父级(定义了 Level )继承。 日志纪录请求通过调用 logger 实例的输出方法实现。这些输出方法有 Debug , Info , Warn , Error 和 Fatal 。 通过定义,输出方法决定了日志纪录请求的 Level 。例如, log 是一个 logger 实例,那么语句 log.Info(“..”) 的日志纪录请求 Level 为 INFO 。 如果日志纪录请求的 Level 比 logger 本身定义(或继承)的 Level 高,则请求是可行的,否则不可行。 简单规则:如果日志记录请求的 Level 为 L , logger 本身定义(或继承) Level 为 K ,当 L>=K 时,日志纪录请求是可行的。 Level 级别: DEBUG <INFO<WARN<ERROR<FATAL 通过名称,调用 log4net.LogManager.GetLogger 方法,可以获取同一个 logger 的实例引用。这样在配置了一个 logger 后,不用在代码中传递引用而可以获取同一个 logger 的引用了。与生物上的亲子关系(父亲总是先于孩子)基本相反,在 log4net 里, logger 可以被创建和配置成任何顺序。特别的是,一个父级 logger 可能比子级 logger 后实例化,但却可以在子级中查找到。
Appender Log4net 允许日志以不同的方式输出,如: ms sql 、文件、控制台或者系统日志等等。 一个 logger 可以有多个 Appender 。每一个可行的日志纪录请求将输出到所有的 appender ,这些 appender 是在当前这个 logger 中引用的,还包括父级 logger 中引用的。换句话说, appender 将在 logger 的层次级别中添加性的继承。例如在 root 中定义了一个 Console appender ,那么所有的 logger 至少有一个 Console appender 。如果 A logger 有一个 File appender ,则 A logger 以及它的子 logger 都有两个 appender 。 Additivity 属性默认为 true ,当设置为 false 时, appender 将采用覆盖的方式,而不再从父级 logger 中继承。
Filters 是用来过滤 appender 能接受的日志信息。 使用以下 filter 的 appender 只接受 Level 从 INFO 到 FATAL 之间的日志纪录请求。 <filter type="log4net.Filter.LevelRangeFilter"> <param name="LevelMin" value="INFO" /> <param name="LevelMax" value="FATAL" /> </filter>
使用以下 filter 的 appender 只接受包含子串为“ database ”的日志纪录。 <filter type="log4net.Filter.StringMatchFilter"> <param name="StringToMatch" value="database" /> </filter> <filter type="log4net.Filter.DenyAllFilter" /> 第一个 filter 将会在日志纪录信息中查找“ database ”,如果找到则不再匹配下面得 filter , appener 接受并纪录该日志。如果没有找到则继续使用第二个 filter ,该 filter 将拒绝任何日志信息。
Layouts 用来定制输出格式。
加载配置 ConfigFile 属性:当我们自己定义了一个 log4net 的配置文件时,可以通过这个属性来指定配置文件。 ConfigFileExtension 属性:当应用程序会编译成不同扩展名称的程序集时,可以使用这个属性。如 Sample 程序将编译成 Sample.exe ,则 ConfigFileExtension 设置为“ config ”,那么所使用的配置文件名称为: Sample.exe.config 。注意不能和 ConfigFile 属性同时使用。 Watch 属性:在运行期间是否监测配置文件。当值为 true 时, FileSystemWatcher 将用来监视配置文件的内容改变、重命名和删除通知。
为应用程序加载 log4net 的配置,可以通过在应用程序集中设置属性。 例如: [assembly: log4net.Config.DOMConfigurator(ConfigFile="Sample.config")] [assembly: log4net.Config.DOMConfigurator(ConfigFileExtension="config")] 也可以不使用任何参数,这时将使用应用程序的配置文件。 [assembly: log4net.Config.DOMConfigurator()]
另一种方式是在代码中使用 DOMConfigurator 类 使用 ConfigureAndWatch(..) 可以指定一个配置文件并且监视该文件的变化。
PatternLayout 每一种指定的转换符号都以 % 开始,后面跟着一个可选的格式符号和一个转换符号。转换符号用来指定输出的数据类型,如 Level , logger , date 等。 例如:转换模型“ %-5p [%t]: %m%n ” ILog log = LogManager.GetLogger(typeof(TestApp)); log.Debug("Message 1"); log.Warn("Message 2"); 转换后: DEBUG [main]: Message 1 WARN [main]: Message 2 “ %-5p ”表示输出日志纪录请求的 Level 值,宽度为 5 个子符,并左对齐。
转换符号列表:
|