By Richard Tsuis, http://richardtsuis.cnblogs.com/
This posting is provided "AS IS" with no warranties, and confers no rights.

对于.NET Framework开发者来说,使用Log4Net进行日志记录是非常方便的,通常只要写好配置文件和简单的编码就可以轻松实现应用程序的日志记录功能。但是因为很多时候我们做开发没有时间详细阅读文档,所以也会因疏忽犯很多错误,下面写的就是因为没有仔细阅读配置文件文档引发的一个错误。

应用环境:
一个Web应用程序,采用三层体系结构,所以记录日志的时候分为应用程序日志、数据访问日志和操作记录日志三个日志。三个日志采用分开文件保存的方式,于是创建了三个日志类,每个日志类拥有一个Log4Net记录器的实例,产生了以下问题:

1.
配置文件中的日志记录器名称对应
一般是在配置文件中增加Logger节点,用name属性进行对应。在源代码中创建日志记录器(Logger)的时候,使用GetLogger方法和日志记录器名称即可获得对应的日志记录器实例。我的日志记录其名称是由类名获得,使用GetType(…).Name的属性进行设定。

2.
配置文件中各记录器书写日志级别的控制
通过Level标签可以进行各记录器的输出级别控制,分别是Fatal(致命错误)、ErrorWarningInfoDebug,对应logger的同名方法。

3.
解决同级别日志书写到其它日志记录器的问题(重点解决)
一般从网络上看到的例子里面都设置了Root元素,我们也习惯于将Appender加到Root元素中,同时我们也会在各自对应的Logger标签下面追加Appender。实际上LoggerRoot是有继承关系的,这也就意味着如果你一个Logger对应的Appender也被追加到了Root节点中,即使其它Logger没有追加此Appender也会通过继承Root的各项属性而获得向这个Appender输出日志的能力。让个别的Logger不继承Root的方法是在Logger的属性additivity上设置false即可。
Posted on 2007-07-20 16:07  Richard Tsuis  阅读(2285)  评论(1编辑  收藏  举报