Log4net SMTPAppender
是否异步发送电子邮件?如果没有,我如何异步发送日志邮件?
我的log4net.config是:
<configuration>
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net" />
</configSections>
<log4net>
<appender name="SMTPAppender" type="log4net.Appender.SMTPAppender">
<authentication value="Basic" />
<to value="xxx@xx.com" />
<from value="yyy@xx.com" />
<username value="yyy@xx.com" />
<password value="yyy" />
<subject value="xxx" />
<smtpHost value="smtp.xx.com" />
<lossy value="true" />
<evaluator type="log4net.Core.LevelEvaluator">
<threshold value="WARN" />
</evaluator>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%newline%date [%thread] %-5level %logger %newline %message%newline%newline%newline" />
</layout>
</appender>
<root>
<level value="INFO"></level>
</root>
<logger name="MyLogger">
<level value="INFO"></level>
<appender-ref ref="SMTPAppender"></appender-ref>
</logger>
</log4net>
</configuration>
答案 0 :(得分:4)
您可以像这样异步调用日志记录方法:
Task.Factory.StartNew(() => log.Info("Message I want to email"));
我实际上从以下SO文章中得到了这个建议:
答案 1 :(得分:2)
在发布固态解决方案之前,有一个简单的解决方法。
public class SmtpAsyncAppender : SmtpAppender
{
protected override void SendEmail(string messageBody)
{
Task.Run(() => base.SendEmail(messageBody));
}
}
它假设SmtpAppender.SendEmail是线程安全的并且可以重新输入。它适用于log4net v1.2.13.0,没有理由不在将来。
答案 2 :(得分:0)
Log4net没有内置异步的appender。如果您需要该功能,则需要编写自己的appender。下载log4net源代码应该可以帮助您入门......