【问题标题】:Log4Net with multiple SMTP appenders: one not working具有多个 SMTP 附加程序的 Log4Net:一个不工作
【发布时间】:2013-12-18 17:38:31
【问题描述】:

我有一个带有多个附加程序的控制台程序 (.Net 4.5)。文件附加程序工作正常,一些 smtp 附加程序工作,而一个没有。

所有 smtp appender 在应用程序关闭时发送邮件,即使缓冲区未满,除了 SmtpAppenderError 什么都不发送。 我试图:

  • 在控制台查看来自 log4net 的调试信息,没有配置错误;
  • 观察 BufferingAppenderSkeleton 集合中的缓冲区,我的消息都在那里;
  • 发送给不同的收件人;
  • 使用日志级别过滤器;
  • 交换过滤器:如果我将 SmtpAppenderOK 配置为记录“ERROR:”并将 SmtpAppenderError 配置为记录“FP:”,那么我会从 SmtpAppenderOK 收到带有 ERROR: 的邮件,而我不会从 SmtpAppenderError 获得任何信息。

在大多数情况下,文件、Ok 和 Error 附加程序都被使用,无论如何 DELETE 工作正常,即使其他附加程序在队列中有消息。 你有什么想法吗?

这是我的配置:

<appender name="LogFileAppender" type="log4net.Appender.RollingFileAppender">
  <param name="File" value="C:\\Log\\myprogram\\log-" />
  <datePattern value="yyyy-MM.dd'.log'" />
  <param name="AppendToFile" value="true" />
  <param name="Encoding" value="utf-8" />
  <param name="RollingStyle" value="Date" />
  <param name="StaticLogFileName" value="false" />
  <param name="maxSizeRollBackups" value="90" />
  <layout type="log4net.Layout.PatternLayout">
    <param name="ConversionPattern" value="%5p [%d] - %m%n" />
  </layout>
</appender>

<appender name="SmtpAppenderError" type="log4net.Appender.SmtpAppender">
    <to value="a.b@c.com" />
    <from value="sender@somewhere.com" />
    <subject value="Error in program" />
    <smtpHost value="mail.somewhere.com" />
    <port value="25" />
    <authentication value="Basic" />
    <username value="user@somewhere.com" />
    <password value="secret!" />
    <bufferSize value="9999" />
    <lossy value="false" />
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%newline%date - %message%newline" />
    </layout>
    <filter type="log4net.Filter.StringMatchFilter">
      <stringToMatch value="ERROR:" />
      <acceptOnMatch value="true" />
    </filter>
    <filter type="log4net.Filter.DenyAllFilter" />
</appender>



<appender name="SmtpAppenderOK" type="log4net.Appender.SmtpAppender">
    <to value="a.b@c.com" />
    <from value="sender@somewhere.com" />
  <subject value="All right!" />
    <smtpHost value="mail.somewhere.com" />
  <port value="25" />
  <authentication value="Basic" />
  <username value="mail@somewhere.com" />
  <password value="secret!" />
  <bufferSize value="9999" />
  <lossy value="false" />
  <layout type="log4net.Layout.PatternLayout">
    <conversionPattern value="%newline%date - %message%newline" />
  </layout>
  <filter type="log4net.Filter.StringMatchFilter">
    <stringToMatch value="FP:" />
    <acceptOnMatch value="true" />
  </filter>
  <filter type="log4net.Filter.DenyAllFilter" />
</appender>


<appender name="SmtpAppenderDELETE" type="log4net.Appender.SmtpAppender">
    <to value="a.b@c.com" />
    <from value="sender@somewhere.com" />
  <subject value="deleting..." />
    <smtpHost value="mail.somewhere.com" />
  <port value="25" />
  <authentication value="Basic" />
  <username value="mail@somewhere.com" />
  <password value="secret!" />
  <bufferSize value="999" />
  <lossy value="false" />
  <layout type="log4net.Layout.PatternLayout">
    <conversionPattern value="%newline%date - %message%newline" />
  </layout>
  <filter type="log4net.Filter.StringMatchFilter">
    <stringToMatch value="FP:delete" />
    <acceptOnMatch value="true" />
  </filter>
  <filter type="log4net.Filter.DenyAllFilter" />
</appender>

<root>
  <level value="ALL" />
  <appender-ref ref="SmtpAppenderError" />
  <appender-ref ref="LogFileAppender" />
  <appender-ref ref="SmtpAppenderOK" />
  <appender-ref ref="SmtpAppenderDELETE" />
</root>

【问题讨论】:

    标签: log4net-configuration


    【解决方案1】:

    我通过更改附加程序的顺序解决了这个问题,首先是 SMTP,然后是文件附加程序。

    【讨论】:

    • 是的,伙计,我有 2 个 smtp appender 1 用于完整日志 1 用于错误,qhen 错误一个被触发,日志一个没有发送。现在我改变了顺序,把日志放在第一位,它们现在都可以工作了。
    猜你喜欢
    • 2011-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-01
    • 1970-01-01
    相关资源
    最近更新 更多