将log4net SmtpAppender扩展为动态到电子邮件地址

时间:2012-02-06 09:02:50

标签: c# log4net log4net-configuration log4net-appender smtpappender

确定。我创建了自定义SmtpAppender以使用动态电子邮件地址。

使用Log4net提供的示例项目 - 我已设法使用动态电子邮件地址,如下所示

log4net.ThreadContext.Properties["ToProperty"] =  "swapneel@stackoverlfow.com";

并在我的 自定义SMTPAppender

        string mailMessageTo;
        if (ToProperty == null)
        {
            mailMessageTo = "DoNotReply@StaockOverlfow.com"            }
        else
        {
            var subjectWriter = new StringWriter(System.Globalization.CultureInfo.InvariantCulture);
            ToProperty.Format(subjectWriter, loggingEvent);
            mailMessageTo = subjectWriter.ToString();
        }

这个代码在示例应用程序中正在运行,但是当我尝试在“项目无效中出于某种原因使用它时。

我在Log4net.config中有2个appender。 EventLog按预期工作,但CustomSmtpAppender不发送任何电子邮件。 解决此问题的任何方向。

1] <appender name ="EmailLogAppender1" type ="MY.Company.ProjectName.Appenders.CustomSmtpAppender, 
    TRS">


2] <appender name ="EventLogAppender" type="log4net.Appender.EventLogAppender" >

1 个答案:

答案 0 :(得分:0)

我启用了log4net internal debugging,可以看到导致问题的原因。

Add this to your Web.Config:

 <appSettings>
  <add key="log4net.Internal.Debug" value="true" />
 </appSettings>
 <system.diagnostics>
  <trace autoflush="true">
   <listeners>
    <add
     name="textWriterTraceListener"
     type="System.Diagnostics.TextWriterTraceListener"
     initializeData="c:\\log4net.txt" />
   </listeners>
  </trace>
 </system.diagnostics>