使用SmtpAppender仅在记录错误或致命时发送电子邮件

时间:2017-01-10 08:57:34

标签: c# asp.net logging log4net

我使用log4net记录不同类型的消息。 我在记录消息时已将SmtpAppender添加到特定用户的电子邮件中。 但是,我想要实现的是,只有在记录错误或致命错误时才能发送电子邮件。 根据我在web.config文件中的当前配置,我收到两封电子邮件,一封用于错误,另一封用于其他日志。 的global.asax.cs:

logger.Info("Info");
logger.Warn("Warning");
logger.Fatal("Fatal");
logger.Error("exception");

的web.config:

<appender name="SmtpAppender" type="log4net.Appender.SmtpAppender">
    <to value="bla@bla.com" />
    <from value="bla@bla.com" />
    <subject value="test logging message" />
    <smtpHost value="*******" />
    <bufferSize value="512" />
    <lossy value="true" />
    <evaluator type="log4net.Core.LevelEvaluator">
        <threshold value="WARN"/>
    </evaluator>
    <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%newline%date [%thread] %-5level %logger- %message%newline%newline%newline" />
    </layout>
</appender>

2 个答案:

答案 0 :(得分:1)

我找到了解决方案,我应该将此标记添加到SmtpAppender:

<filter type="log4net.Filter.LevelRangeFilter">
    <levelMin value="ERROR" />
    <levelMax value="FATAL" />
</filter>

答案 1 :(得分:0)

尝试使用:

<appender name="SmtpAppender" type="log4net.Appender.SmtpAppender">
    ...
    <threshold value="WARN"/>
    ...
</appender>

(或threshold value="ERROR",因为您说要限制为Error和Fatallevels)而不是:

<appender name="SmtpAppender" type="log4net.Appender.SmtpAppender">
    ...
    <evaluator type="log4net.Core.LevelEvaluator">
        <threshold value="WARN"/>
    </evaluator>
    ...
</appender>

log4net文档或this message in the log4net user mailing list解释了差异。