2010-02-26 184 views
4

我已经配置了一个SMTP appender在发生错误时发送电子邮件。Log4Net多个SMTP appender?

<appender name="EmailAppender"> 
    <bufferSize value="50" /> 
    <lossy value="false" /> 
    <threshold value="ALL" /> 
    <evaluator type="log4net.Core.LevelEvaluator,log4net"> 
    <threshold value="ERROR" /> 
    </evaluator> 
</appender> 

我还需要在操作(这不是错误)完成时收到一封电子邮件。理论上我可以把这个记录作为一个错误并且得到一封电子邮件,但实际上这不是一个错误,而是一个操作已经完成的指示(更像是一个INFO)。

我应该添加另一个SMTP appender吗?

+1

为什么不只是将阈值更改为INFO? – 2010-02-26 23:29:34

+0

还有其他INFO消息我不想发送电子邮件 – DotnetDude 2010-02-26 23:43:48

回答

3

您应该可以将<threshold value="ERROR"/>更改为<threshold value="INFO"/>。然后这个appender将发送INFO,WARN,ERROR和FATAL的电子邮件。

如果您需要自定义级别,您可以使用类似:

<level> 
    <name value="CUSTOM"/> 
    <value value="35000"/> 
</level> 

有关如何使用自定义级别进行过滤的更多信息,请参见this question。 Apache提供关于here级别的更多信息。

+0

还有其他INFO消息我不想发送电子邮件 – DotnetDude 2010-02-26 23:43:28

+0

我已更新我的答案。 – 2010-02-26 23:45:51

0

在我的一个项目中,我使用命名空间来控制日志记录。下面是示例配置:

<log4net> 
<appender name="LogFileAppender" type="log4net.Appender.FileAppender,log4net" > 
    <param name="File" value="c:\\tmp\\remoteServerLog.txt" /> 
       <rollingStyle value="Size" /> 
    <maxSizeRollBackups value="5" /> 
    <maximumFileSize value="3MB" /> 
    <param name="AppendToFile" value="false" /> 
    <layout type="log4net.Layout.PatternLayout,log4net"> 
    <param name="ConversionPattern" value="%d %-5p %c - %m%n" /> 
    </layout> 
</appender> 
<root> 
    <priority value="ALL" /> 
</root> 
<logger name="NHibernate.SQL"> 
    <level value="WARN" /> 
    <appender-ref ref="LogFileAppender" /> 
</logger> 
<logger name="NHibernate.Cfg"> 
    <level value="WARN" /> 
    <appender-ref ref="LogFileAppender" /> 
</logger> 
<logger name="NHibernate"> 
    <level value="WARN" /> 
    <appender-ref ref="LogFileAppender" /> 
</logger> 
<logger name="MyNameSpace.MyBusinessCore"> 
    <level value="ALL" /> 
    <appender-ref ref="LogFileAppender" /> 
</logger> 

根据源类的命名空间,可以调整日志记录级别。因此,在上面的示例中,我只记录NHibernate的警告以及MyNameSpace.MyBusinessCore(包括DEBUG和TRACE)中的所有内容。

综上所述,在你的例子我只想补充以下内容:

<root> 
    <priority value="INFO" /> 
</root> 
<logger name="Your.Namespace "> 
    <level value="INFO" /> 
    <appender-ref ref="EmailAppender" /> 
</logger> 

比Your.Namespace也将发送INFO级别的日志。