Cent让LevelMatchFilter工作

时间:2013-01-26 16:38:57

标签: .net log4net

我创建了一个自定义appender,使用EF将错误记录到数据库。我还有一个RollingFileAppender,我想记录所有内容。这是我的配置部分:

  <log4net>
    <appender name="RollingFileAppender"
          type="log4net.Appender.RollingFileAppender" >
      <param name="File" value="c:\logs\log-file.txt" />
      <param name="MaximumFileSize" value="1MB" />
      <layout type="log4net.Layout.PatternLayout" value="%date [%thread] %-5level %logger [%ndc] - %message%newline"/>
    </appender>
    <appender name="LogToDBAppender" type="Common.Appender.LogToDBAppender">
      <filter type="log4net.Filter.LevelMatchFilter">
        <levelToMatch value="ERROR"/>
      </filter>
    </appender>
    <root level="ALL">      
      <appender-ref ref="RollingFileAppender" />
      <appender-ref ref="LogToDBAppender" />
    </root>    
  </log4net>

这里的问题是以下代码:

logger.Info("Entering LoadAllUsers");

调用LogToDBAppender类,当然它失败了,因为它期待一个异常参数。

感谢任何帮助。

由于

1 个答案:

答案 0 :(得分:0)

您需要在DenyAllFilter

之后添加LevelMatchFilter
<appender name="LogToDBAppender" type="Common.Appender.LogToDBAppender">
  <filter type="log4net.Filter.LevelMatchFilter">
    <levelToMatch value="ERROR"/>
  </filter>
  <filter type="log4net.Filter.DenyAllFilter" />
</appender>

第一个过滤器接受所有ERROR消息,第二个过滤器拒绝所有其他消息。如果没有第二个过滤器,其他消息也会被接受。