代码改变世界

log4net配置文件中的注释导致log4net不工作了!(原创)

2006-08-03 23:58  BAsil  阅读(1588)  评论(1编辑  收藏  举报

好久没有更新blog了,真是有点惭愧。最近项目比较忙,不巧的是今天又发现我的log4net无法正常工作了,通过网上的搜索和反复的测试,终于发现了问题,同时也学到了几个新的技巧,拿出来眩一眩。

还是说一下出的问题吧。

问题描述:log4net不记录任何的错误。


问题解决:由于在配置文件中

<layout type="log4net.Layout.PatternLayout">
                
<!--<header value="-----------Header------------- " />
                <footer value="-----------Footer-------------" />
                <conversionPattern value="%newline%date %-5level %logger - %message%newline" />
-->
                
<conversionPattern value="&lt;HR COLOR=red&gt;%n异常时间:%d [%t] &lt;BR&gt;%n异常级别:%-5p &lt;BR&gt;%n异 常 类:%c [%x] &lt;BR&gt;%n%m &lt;BR&gt;%n &lt;HR Size=1&gt;" />
            
</layout>
存在<!-- -->注释,导致log4net不记录任何错误;另一方面可能由于log4net的监视机制:
/*If Watch is specified and set to true then the framework will watch the configuration file and will reload the config each time the file is modified. 如果设置为true,会在每次文件被修改的时候重新载入
*/

[assembly: log4net.Config.XmlConfigurator(ConfigFileExtension
="log4net",Watch=true)]
也就是说我们的修改会立刻反映到log中,但是如果将正确的配置修改为错误,个人理解log4net会忽略此次载入,仍然选择上次正确的配置。我的问题可能就出在这里,由于在正确的配置下测试并加了注释,当时仍然能够生成log,可是当我第二天上班的时候却发现log4net不能工作了,去掉注释应该就可以了。在此提醒广大网友,有时候log4net不工作了,可以试着考虑这方面的因素。

再来说一下我刚学到的技巧

1、Log4net的RollingFileAppender按照日期生成同一后缀名的文件
     
        <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
            
<file value="log\\Log-" />
            
<appendToFile value="true" />
            
<rollingStyle value="Composite" />
            
<datePattern value="yyyy-MM-dd&quot;.htm&quot;" />
            
<maxSizeRollBackups value="10" />
            
<maximumFileSize value="10000" />
            
<staticLogFileName value="false" />
            
<layout type="log4net.Layout.PatternLayout">
                
<conversionPattern value="&lt;HR COLOR=red&gt;%n异常时间:%d [%t] &lt;BR&gt;%n异常级别:%-5p &lt;BR&gt;%n异 常 类:%c [%x] &lt;BR&gt;%n%m &lt;BR&gt;%n &lt;HR Size=1&gt;" />
            
</layout>
        
</appender>


这样可以生成Log-yyyy-MM-dd.htm的文件,怎么样不错吧,在这里要感谢9527的晃悠人生的用log4net快速构建asp.net 异常日志

注:在阅读log4net帮助文档的时候发现了一段黑体标注的话,摘录下来
A simple call to LogManager.GetLogger will cause the attributes on the calling assembly to be read and processed. Therefore it is imperative to make a logging call as early as possible during the application start-up, and certainly before any external assemblies have been loaded and invoked.
我个人理解,在做asp.net程序的时候,就是在global.asax里面就声明:

private static readonly log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);

不知道这样理解对不对。