要为我的 WebAPI 应用程序执行错误日志记录,我使用的是 Log4net。我有两个 log4net 附加程序,一个 SmtpEmail 附加程序,它使用另一个配备 smtp 的服务器来发送错误通知电子邮件,以及一个指向本地 .txt 文件的 FileAppender。我的问题是我的 FileAppender 正在按预期记录我的 log.txt 文件中的所有内容,但是 SmtpEmail 附加程序无法正常工作。没有收到电子邮件,也没有收到任何错误消息。我注意到 DOMConfigurator.Configure() 需要很长时间才能返回,并且在它返回之后,我经常会留下许多相同的运行进程继续返回。关于出了什么问题的任何想法,或者我可以做些什么来监控对 smtp 服务器(以下称为“baz.bar.com”)的调用是否通过?
这是 .config 文件中相关的 log4net 代码:
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
<log4net>
<appender name="FileAppender" type="log4net.Appender.FileAppender">
<file value="log-file.txt" />
<appendToFile value="true" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
</layout>
</appender>
<appender name="SmtpAppender" type="log4net.Appender.SmtpAppender">
<to value="foo@bar.com" />
<from value="foo@bar.com" />
<subject value="Write to AX Error" />
<smtpHost value="baz.bar.com" />
<bufferSize value="1" />
<lossy value="false" />
<evaluator type="log4net.Core.LevelEvaluator">
<threshold value="WARN"/>
</evaluator>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%newline%date [%thread] %-5level %logger [%property{NDC}] - %message%newline%newline%newline" />
</layout>
</appender>
<root>
<level value ="DEBUG" />
<appender-ref ref ="FileAppender"/>
<appender-ref ref ="SmtpAppender"/>
</root>
我正在使用统一。我怀疑这是问题所在,因为我的 FileAppender 正在工作,但无论如何这里是代码:
private static IUnityContainer BuildUnityContainer()
{
var container = new UnityContainer();
container.RegisterType<ILog>().RegisterInstance(LogManager.GetLogger(typeof(ILog)));
return container;
}
private ILog _log;
public LERService(ILog log)
{
_log = log;
}
这是我在 LERService 的函数中对日志的调用:
catch(Exception e)
{
_log.Fatal("Cannot submit to client with following exception: " + e.Message, e);
}