1

要为我的 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);
        }
4

1 回答 1

1

所以事实证明有一些我没有提供的授权。

此链接提供了一种检查电子邮件是否正在发送的方法。 http://david.gardiner.net.au/2008/11/log4nets-smtpappender-with-multiple.html

于 2012-10-09T14:58:19.460 回答