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

Using SmtpAppender to only send emails when logging an error or fatal

我正在使用 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>

尝试使用:

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

(或 threshold value="ERROR" 因为你说你想限制错误和致命级别)而不是:

<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 解释了差异。

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

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