Log4Net smtpappender忽略了级别过滤器

时间:2016-08-11 07:25:22

标签: log4net

我正在使用Log4Net记录我的应用程序中的所有不同类型的事件。因此我配置了一个fileAppender和一个smtpAppender。 虽然fileAppender正在记录所有内容,但是如果日志记录级别为FATAL,则smptAppender应该只向我发送一封电子邮件。

目前,Log4Net正在向我发送ERROR和FATAL级别的电子邮件。

这是我的配置:

<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>

我正在使用最新的 Log4Net版本[1.2.15] 2.0.5

奇怪的是,smptAppender正在使用此配置过滤INFO和DEBUG级别。

使用等级评估程序或等级范围而不是等级匹配过滤器也不起作用。

关卡评估员:

<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>

我知道stackOverflow上有很多关于这个主题的主题,但是没有一个可以帮助我解决我的问题。

具有相同主题的主题:

How do I configure a log4net SmtpAppender to only send me e-mails when a certain level is hit?

Log4j2: SMTPAppender does not send mails with error or fatal level

Log4Net LevelEvaluator Ignored when bufferSize greater than 1 for SmtpAppender

1 个答案:

答案 0 :(得分:0)

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

你正在使用&#34;有损&#34;和&#34; bufferSize&#34;设置。我想这是在日志到达FATAL事件时获取最后512个事件(不仅是FATAL事件)。

您可以使用简单的&#34;阈值&#34;而不是使用LevelMatchFilter或LevelEvaluator。 (不在评估员中)。

有关详细信息,请参阅Why do Log4Net Filters Receive Messages Outside of the Evaluator Threshold?

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