Log4Net smtpappender正在忽略级别筛选器

Log4Net smtpappender正在忽略级别筛选器,log4net,Log4net,我正在使用Log4Net记录我的应用程序中所有不同类型的事件。因此,我配置了一个fileAppender和一个smtpAppender。 当fileAppender记录所有内容时,smptAppender只应在记录级别为致命时向我发送电子邮件 现在,Log4Net正在向我发送错误和致命级别的电子邮件 这是我的配置: <log4net> <appender name="FileAppender" type="log4net.Appender.RollingFileAppend

我正在使用Log4Net记录我的应用程序中所有不同类型的事件。因此,我配置了一个fileAppender和一个smtpAppender。 当fileAppender记录所有内容时,smptAppender只应在记录级别为致命时向我发送电子邮件

现在,Log4Net正在向我发送错误和致命级别的电子邮件

这是我的配置:

<log4net>
  <appender name="FileAppender" type="log4net.Appender.RollingFileAppender">
    <file value="C:\Temp\xxx.txt" />
    <appendToFile value="true" />
    <rollingStyle value="Size" />
    <maximumFileSize value="10MB" />
    <staticLogFileName value="true" />
    <maxSizeRollBackups value="150" />
    <layout type="log4net.Layout.PatternLayout">
      <header value="DateTime | Thread | Level | ClassName | Message" />
      <conversionPattern value="%date | %thread | %-5level | %logger | %message%newline" />
    </layout>
  </appender>
  <appender name="SmtpAppender" type="log4net.Appender.SmtpAppender">
    <filter type="log4net.Filter.LevelMatchFilter">
      <acceptOnMatch value="true" />
      <levelToMatch value="FATAL" />
    </filter>
    <filter type="log4net.Filter.DenyAllFilter" />
    <to value="xxx" />
    <from value="xxx" />
    <subject value="Error" />
    <smtpHost value="xxx" />
    <bufferSize value="512" />
    <lossy value="true" />
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%date | %thread | %-5level | %logger | %message%newline" />
    </layout>
  </appender>
  <root>
    <level value="ALL" />
    <appender-ref ref="FileAppender" />
    <appender-ref ref="SmtpAppender" />
  </root>
</log4net>


我知道这个问题已经很老了,但我为其他有这个问题的人发布了这个答案

您正在使用“有损”和“缓冲区大小”设置。我猜是在日志到达致命事件时获取最后512个事件(不仅仅是致命事件)

不使用LevelMatchFilter或LevelEvaluator,您可以简单地使用一个简单的“阈值”(不在evaluator中)进行测试

有关更多信息,请参阅


但我认为在这种情况下,您将不会收到其他事件,因此缓冲将是无用的。

我知道这个问题已经很老了,但我为其他有此问题的人发布了此答案

您正在使用“有损”和“缓冲区大小”设置。我猜是在日志到达致命事件时获取最后512个事件(不仅仅是致命事件)

不使用LevelMatchFilter或LevelEvaluator,您可以简单地使用一个简单的“阈值”(不在evaluator中)进行测试

有关更多信息,请参阅

但我认为,在这种情况下,您将不会收到邮件中的其他事件,因此缓冲将是无用的

<evaluator type="log4net.Core.LevelEvaluator">
    <threshold value="FATAL"/>
</evaluator>
<filter type="log4net.Filter.LevelRangeFilter">
   <param name="LevelMin" value="FATAL"/>
   <param name="LevelMax" value="FATAL"/>
</filter>