2017-01-10 74 views
0

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

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

的web.config:

<appender name="SmtpAppender" type="log4net.Appender.SmtpAppender"> 
    <to value="[email protected]" /> 
    <from value="[email protected]" /> 
    <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> 

回答

0

我已经找到了解决办法,我应该只是添加此标记到SmtpAppender:

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

尝试使用:

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

(或threshold value="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解释了区别。

+0

,导致没有在所有 – Claritta

+0

@clarittasafa发送电子邮件 - 你是对的;这是因为你的appender被配置为有损耗的,因此需要一个评估者。您可以配置lossy = false,或者添加评估程序,具体取决于您的要求。 – Joe