下面我们依次讲解各个标签内文本的含义: 3.1.1 <root> <root> <level value="WARN" /> <appender-ref ref="LogFileAppender" /> <appender-ref ref="ConsoleAppender" /> </root> 在框架的体系里,所有的日志对象都是根日志(root logger)的后代。 因此如果一个日志对象没有在配置文件里显式定义,则框架使用根日志中定义的属性。 在<root>标签里,可以定义level级别值和Appender的列表。 如果没有定义LEVEL的值,则缺省为DEBUG。 可以通过<appender-ref>标签定义日志对象使用的Appender对象。 <appender-ref>声明了在其他地方定义的Appender对象的一个引用。 在一个logger对象中的设置会覆盖根日志的设置。而对Appender属性来说,子日志对象则会继承父日志对象的Appender列表。 这种缺省的行为方式也可以通过显式地设定<logger>标签的additivity属性为false而改变。 <logger name="testApp.Logging" additivity="false"> </logger> Additivity的值缺省是true. 3.1.2 <Logger> <logger name="testApp.Logging"> <level value="DEBUG"/> </logger> <logger> 元素预定义了一个具体日志对象的设置。 然后通过调用LogManager.GetLogger(“testAPP.Logging”)函数,你可以检索具有该名字的日志。 如果LogManager.GetLogger(…)打开的不是预定义的日志对象,则该日志对象会继承根日志对象的属性。 知道了这一点,我们可以说,其实<logger>标签并不是必须的。
3.1.3 <appender> <appender name="LogFileAppender" type="log4net.Appender.FileAppender" > <param name="File" value="log-file.txt" /> <param name="AppendToFile" value="true" /> <layout type="log4net.Layout.PatternLayout"> <param name="Header" value="[Header]\r\n" /> <param name="Footer" value="[Footer]\r\n"/> <param name="ConversionPattern" value="%d [%t] %-5p %c - %m%n" /> </layout> <filter type="log4net.Filter.LevelRangeFilter"> <param name="LevelMin" value="DEBUG" /> <param name="LevelMax" value="WARN" /> </filter> </appender> 在<root>标签或单个的<logger>标签里的Appender对象可以用<appender>标签定义。 <appender>标签的基本形式如上面所示。 它定义了appender的名字和类型。 另外比较重要的是<appender>标签内部的其他标签。 不同的appender有不同的<param>标签。在这里,为了使用FileAppender,你需要一个文件名作为参数。 另外还需要一个在<appender>标签内部定义一个Layout对象。 Layout对象定义在它自己的<layout>标签内。 <layout>标签的type属性定义了Layout的类型(在本例里是PatternLayout),同时也确定了需要提供的参数值。 Header和Footer标签提供了一个日志会话(logging session)开始和结束时输出的文字。 有关每种appender的具体配置的例子,可以在log4net\doc\manual\example-config-appender.html中得到。 3.1.4 log4net.Layout.PatternLayout中的转换模式(ConversionPattern) %m(message):输出的日志消息,如ILog.Debug(…)输出的一条消息 %n(new line):换行 %d(datetime):输出当前语句运行的时刻 %r(run time):输出程序从运行到执行到当前语句时消耗的毫秒数 %t(thread id):当前语句所在的线程ID %p(priority): 日志的当前优先级别,即DEBUG、INFO、WARN…等 %c(class):当前日志对象的名称,例如: 模式字符串为:%-10c -%m%n 代码为: ILog log=LogManager.GetLogger(“Exam.Log”); log.Debug(“Hello”); 则输出为下面的形式: Exam.Log - Hello %L:输出语句所在的行号 %F:输出语句所在的文件名 %-数字:表示该项的最小长度,如果不够,则用空格填充 例如,转换模式为%r [%t]%-5p %c - %m%n 的 PatternLayout 将生成类似于以下内容的输出: 176 [main] INFO org.foo.Bar - Located nearest gas station. 3.1.5 <filter> 最后,让我们看看在Appender元素里的<filter>标签。它定义了应用到Appender对象的过滤器。 本例中,我们使用了LevelRangeFilter过滤器,它可以只记录LevelMin和LevelMax参数指定的日志级别之间的日志事件。 可以在一个Appender上定义多个过滤器(Filter),这些过滤器将会按照它们定义的顺序对日志事件进行过滤。 其他过滤器的有关信息可以在log4net的SDK文档中找到。
|