我已经使用RollingLogFileAppender和SmtpAppender配置了log4net,目的是将DEBUG级别记录到RollingLogFileAppender而仅将FATAL记录到SmtpAppender:
<appender name="SmtpAppender" type="log4net.Appender.SmtpAppender">
<to value="test@test.com" />
<from value="test@test.com" />
<subject value="Fatal Error" />
<smtpHost value="smtp.test.com" />
<SMTPPort value="366"/>
<Username value="test@test.com"/>
<Password value="password"/>
<bufferSize value="1" />
<lossy value="true" />
<evaluator type="log4net.Core.LevelEvaluator">
<threshold value="FATAL"/>
</evaluator>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger [%ndc] - %message%newline" />
</layout>
</appender>
<root>
<level value="DEBUG" />
<appender-ref ref="RollingLogFileAppender" />
<appender-ref ref="SmtpAppender" />
</root>
这一功能完美无缺,直到我增加bufferSize。当我这样做时,所有级别都通过电子邮件发送,log4net.Core.LevelEvaluator似乎被忽略。我也尝试过使用LevelRangeFilter和LevelMatchFilter,但配置完成后我似乎根本没有收到任何电子邮件。
答案 0 :(得分:10)
评估程序不会被忽略,但它没有按预期执行:您的设置指示appender将所有日志消息放在缓冲区上,并仅在记录了具有级别FATAL的消息时发送电子邮件。如果缓冲区已满,则丢弃最旧的消息(即有损设置;如果没有它,一旦缓冲区已满,您也会收到一封电子邮件。)
如果要过滤消息,则需要使用过滤器。例如:
<filter type="log4net.Filter.LevelMatchFilter">
<acceptOnMatch value="true" />
<levelToMatch value="FATAL" />
</filter>
<filter type="log4net.Filter.DenyAllFilter" />
我不确定我是否会考虑这样的邮件追加器,因为我希望立即得到通知,如果我的应用程序有问题需要使用级别FATAL进行登录。