Log4Net с несколькими приложениями SMTP: один не работает

У меня есть консольная программа (.Net 4.5) с несколькими приложениями. Приложение файлов работает нормально, некоторые приложения smtp работают, а одно нет.

Все приложения smtp отправляют почту при закрытии приложения, даже если буферы не заполнены, за исключением SmtpAppenderError, который ничего не отправляет. Я пытался:

  • см. отладочную информацию из log4net в консоли, ошибок конфигурации нет;
  • просмотрите буферы в коллекции BufferingAppenderSkeleton, и все мои сообщения там;
  • отправить разным получателям;
  • использовать фильтры уровня журнала;
  • Фильтры подкачки: если я настрою SmtpAppenderOK для регистрации «ERROR:» и SmtpAppenderError для регистрации «FP:», тогда я буду получать письма с ERROR: от SmtpAppenderOK и ничего не получаю от 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="[email protected]" />
    <from value="[email protected]" />
    <subject value="Error in program" />
    <smtpHost value="mail.somewhere.com" />
    <port value="25" />
    <authentication value="Basic" />
    <username value="[email protected]" />
    <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="[email protected]" />
    <from value="[email protected]" />
  <subject value="All right!" />
    <smtpHost value="mail.somewhere.com" />
  <port value="25" />
  <authentication value="Basic" />
  <username value="[email protected]" />
  <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="[email protected]" />
    <from value="[email protected]" />
  <subject value="deleting..." />
    <smtpHost value="mail.somewhere.com" />
  <port value="25" />
  <authentication value="Basic" />
  <username value="[email protected]" />
  <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>

person Luca    schedule 18.12.2013    source источник


Ответы (1)


Я решил это, изменив порядок приложений, сначала все SMTP, а затем файловое приложение.

person Luca    schedule 20.12.2013
comment
Да, приятель, у меня было 2 приложения smtp 1 для полного журнала 1 для ошибок, когда сработала ошибка, журнал не отправил. Теперь я изменил порядок, поставив журналы на первое место, и теперь они оба работают. - person Borja Alvarez; 11.01.2017