如何控制log4net.Appender.SmtpAppender电子邮件触发器

时间:2015-05-15 17:29:39

标签: c# email log4net smtpappender

我在应用程序中使用log4net.Appender.SmtpAppender。这是它的配置方式。

  <appender name="FatalSmtpAppender" type="log4net.Appender.SmtpAppender">
  <to value="...." />
  <from value="......" />
  <subject value="URGENT: Error occured" />
  <smtpHost value="....." />
  <bufferSize value="1" />
  <lossy value="false" />
  <filter type="log4net.Filter.LevelRangeFilter">
    <levelMin value="FATAL" />
    <levelMax value="FATAL" />
  </filter>
  <layout type="log4net.Layout.PatternLayout">
    <conversionPattern value="%newline%date [%thread] %-5level %logger [%property{NDC}] - %message%newline%newline%newline" />
  </layout>
</appender>

到目前为止,它的工作正如预期的那样。

现在业务需求发生了变化。如果出现错误,系统将尝试修复3次。在所有尝试都失败后,它应该发送电子邮件。

编码修复错误部分的3次尝试。但log4net会在第一次出现错误时发送电子邮件。我不知道如何在3次尝试之前保留电子邮件。

我希望它不会令人困惑。感谢!!!

1 个答案:

答案 0 :(得分:0)

在3次尝试后发送错误的逻辑最好在业务逻辑中解决,而不是在smtp appender中。

int failurecount = 0;
while (true){   
...
  try{
  ... 
  }catch(...){
      failurecount++;
      if (failurecount == 3){
          _logger.Error(...);
           break;
      } // else log warning
  }
}

Appender不知道错误如何相互关联,你必须记住log4net是一个尽力而为的故障停止日志记录系统。如果log4net无法登录,则不会通知您。有关详细信息,请参阅https://logging.apache.org/log4net/release/faq.html