Log4Net多个SMTP appenders?

时间:2010-02-26 23:24:12

标签: .net logging 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吗?

2 个答案:

答案 0 :(得分:3)

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

如果您需要自定义级别,可以使用以下内容:

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

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

答案 1 :(得分: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的WARNings以及来自MyNameSpace.MyBusinessCore的所有内容(包括DEBUG和TRACE)。

总而言之,在您的示例中,我只会添加以下内容:

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

比Your.Namespace还会发送INFO级别日志。