我正在使用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
答案 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?。
但我认为在这种情况下,您将不会收到邮件中的其他事件,因此缓冲将毫无用处。