一个完整的配置文件的例子如下所示,这个是”在C#代码中应用Log4Net(二)”中使用的配置文件。
<log4net> <!-- 错误日志类--> <logger> <level value="ALL" /> <appender-ref ref="ErrorAppender" /> </logger> <!-- 信息日志类 --> <logger> <level value="ALL" /> <appender-ref ref="InfoAppender" /> </logger> <!-- 错误日志附加介质--> <appender type="log4net.Appender.RollingFileAppender"> <param value="Log\\LogError\\" /> <param value="true" /> <param value="100" /> <param value="10240" /> <param value="false" /> <param value="yyyyMMdd".htm"" /> <param value="Date" /> <!--布局--> <layout type="log4net.Layout.PatternLayout"> <param value="<HR COLOR=red>%n异常时间:%d [%t] <BR>%n异常级别:%-5p <BR>%n异 常 类:%c [%x] <BR>%n%m <BR>%n <HR Size=1>" /> </layout> </appender> <!-- 信息日志附加介质--> <appender type="log4net.Appender.RollingFileAppender"> <param value="Log\\LogInfo\\" /> <param value="true" /> <param value="10240" /> <param value="100" /> <param value="false" /> <param value="yyyyMMdd".htm"" /> <param value="Date" /> <!-- 信息日志布局--> <layout type="log4net.Layout.PatternLayout"> <param value="<HR COLOR=blue>%n日志时间:%d [%t] <BR>%n日志级别:%-5p <BR>%n日 志 类:%c [%x] <BR>%n%m <BR>%n <HR Size=1>" /> </layout> </appender> </log4net>
先不分析上面这段配置信息是什么意思。我们先来回想一下我们的日志类通常用来做什么,假设我们有一个库存管理系统,分为两大模块,一个是出库,一个是入库。我们可能想要出库的相关信息保存在某一个文件夹里面,入库的信息存在另一个文件夹里面。这样,我们通常的做法是用在日志类中不同的路径将日志写到不同位置,但是如果我们不单单想要写到日志文件中,而且想要将这些日志文件插入数据库呢?一般来讲,我们会再建立一些方法,来写到数据库。另外,正常日志信息和错误日志信息的布局,我们可能想要根据日志类型的不同,改变信息的布局,比如错误日志里面有异常信息的记录,正常日志里面就没有异常的记录。
总结地说,我们的日志类的需求通常就是:1、能够按要求将日志写到不同的介质上(文件、数据库、邮件等);2、能够根据日志类型的不同,写到不同的位置;3、能根据信息的类型,改变日志的布局。
不得不说,想要写好一个日志记录类还是挺不容易的的,看是简单的需求要做好,也是需要下大工夫的。而这些在Log4Net中,只需要经过一些配置,就可以完成。如果你懒得写配置信息,也可以直接将上面的配置信息拷过去用。
配置文件中节点的解释logger是负责日志的记录者,假设我们需要记录一些正常的运行时日志和出现异常时的错误日志,那么我们可以通过在配置文件当中添加两个Logger实现。
appender提供记录的介质,前面谈到,我们可能要同时将数据记录到文件和数据库中,我们可以简单地通过编写appender实现,而且Log4Net当中已经默认提供了一些常用的appender,,我们可以简单地修改一些配置文件就实现同时向数据库和同时向文件中写入的功能。
layout负责把记入的内容格式化。其实就是决定日志文件要长什么样子。
Logger节点的解释以错误日志类为例进行解释
<!-- 错误日志类--> <logger> <!-- 日志类的名字--> <level value="ALL" /> <!-- 定义记录的日志级别--> <appender-ref ref="ErrorAppender" /><!-- 记录到什么介质中--> </logger>
level定义记录的日志级别,就是说,你要记录哪个级别以上的日志,级别由高往低依次是:
NoneFatal
ERROR
WARN
DEBUG
INFO
ALL
级别的定义要注意,如果你定义DEBUG,那么低于DEBUG级别以下的信息,将不会记入日志,啥意思呢?就是说,就算你在程序里,用log.info()来写入一个日志信息,可是你在配置中指定level为DEBUG,由于INFO级别低于DEBUG,所以,不会被记入日志.这样的处理非常灵活