.net 让LevelMatchFilter开始工作

.net 让LevelMatchFilter开始工作,.net,log4net,.net,Log4net,我创建了一个自定义appender,使用EF将错误记录到数据库中。我还有一个RollingFileAppender,我想记录所有内容。这是我的配置部分: <log4net> <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender" > <param name="File" value="c:\logs\log-file.

我创建了一个自定义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>
调用LogToDBAppender类,当然它会失败,因为它需要一个异常参数

感谢您的帮助


谢谢

您需要在
LevelMatchFilter
之后添加一个
DenyAllFilter

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


第一个筛选器接受所有错误消息,第二个筛选器拒绝所有其他消息。如果没有第二个过滤器,其他邮件也会被接受。

我尝试了你的建议,但只能使用另一个RollingFileAppender。如果我在我的LogToDBAppender中实现它,它不会有任何区别…它仍然对信息级日志起作用。你的appender是从AppenderSkleton派生的吗?appender需要实现过滤,否则将无法工作。
<appender name="LogToDBAppender" type="Common.Appender.LogToDBAppender">
  <filter type="log4net.Filter.LevelMatchFilter">
    <levelToMatch value="ERROR"/>
  </filter>
  <filter type="log4net.Filter.DenyAllFilter" />
</appender>