Log4Net несколько SMTP-приложений? - PullRequest
4 голосов
/ 27 февраля 2010

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

<appender name="EmailAppender">
  <bufferSize value="50" />
  <lossy value="false" />
  <threshold value="ALL" />
  <evaluator type="log4net.Core.LevelEvaluator,log4net">
    <threshold value="ERROR" />
  </evaluator>
</appender>

Мне нужно также получить электронное письмо, когда операция (которая не является ошибкой) завершена. Теоретически я могу записать это как ошибку и получить электронное письмо, но на самом деле это не ошибка, а признак того, что операция была завершена (больше похоже на INFO).

Должен ли я добавить еще один SMTP-приложение?

Ответы [ 2 ]

3 голосов
/ 27 февраля 2010

Вы можете изменить <threshold value="ERROR"/> на <threshold value="INFO"/>.Затем это приложение будет доставлять электронные письма для INFO, WARN, ERROR и FATAL.

Если вам нужен пользовательский уровень, вы можете использовать что-то вроде:

<level>
  <name value="CUSTOM"/>
  <value value="35000"/>
</level>

Смотрите этот вопрос для получения дополнительной информации о том, как фильтровать с помощью пользовательских уровней.Apache предоставляет больше информации об уровнях здесь .

0 голосов
/ 27 февраля 2010

В одном из моих проектов я использую пространства имен для управления журналированием. Вот пример конфигурации:

<log4net>
<appender name="LogFileAppender" type="log4net.Appender.FileAppender,log4net" >
  <param name="File" value="c:\\tmp\\remoteServerLog.txt" />
                <rollingStyle value="Size" />
  <maxSizeRollBackups value="5" />
  <maximumFileSize value="3MB" />
  <param name="AppendToFile" value="false" />
  <layout type="log4net.Layout.PatternLayout,log4net">
    <param name="ConversionPattern" value="%d %-5p %c - %m%n" />
  </layout>
</appender>
<root>
  <priority value="ALL" />
</root>
<logger name="NHibernate.SQL">
  <level value="WARN" />
  <appender-ref ref="LogFileAppender" />
</logger>
<logger name="NHibernate.Cfg">
  <level value="WARN" />
  <appender-ref ref="LogFileAppender" />
</logger>
<logger name="NHibernate">
  <level value="WARN" />
  <appender-ref ref="LogFileAppender" />
</logger>
<logger name="MyNameSpace.MyBusinessCore">
  <level value="ALL" />
  <appender-ref ref="LogFileAppender" />
</logger>

В зависимости от пространства имен исходного класса вы можете настроить уровень ведения журнала. Таким образом, в приведенном выше примере я регистрирую только ПРЕДУПРЕЖДЕНИЯ из NHibernate и все из MyNameSpace.MyBusinessCore (включая DEBUG и TRACE).

Подводя итог, в вашем примере я бы добавил только следующее:

<root>
  <priority value="INFO" />
</root>
<logger name="Your.Namespace ">
  <level value="INFO" />
  <appender-ref ref="EmailAppender" />
</logger>

Чем Your.Namespace также отправит журналы уровня INFO.

...