使用Log4net通过smtp发送电子邮件,从未收到过电子邮件

时间:2012-10-08 19:51:47

标签: asp.net logging smtp log4net error-logging

要为我的WebAPI应用程序执行错误记录,我使用的是Log4net。我有两个log4net appender,一个SmtpEmail appender,它使用另一个配备smtp的服务器发送错误通知电子邮件,以及一个指向本地.txt文件的FileAppender。我的问题是我的FileAppender按预期记录了我的log.txt文件中的所有内容,但是SmtpEmail appender无效。没有收到电子邮件,我也没有收到任何错误消息。我注意到的是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>

我正在使用Unity。我怀疑这是问题所在,因为我的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);
        }

1 个答案:

答案 0 :(得分:1)

事实证明,我还没有提供一些授权。

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