2014-01-14 4 views
3

Я использую log4j2-beta9 и у меня есть следующие конфигурации (часть его):log4j2 SMTP Appender: как включить предыдущие сообщения с другим уровнем?

<Appenders> 
    <SMTP name="Mailer" suppressExceptions="false" 
      subject="${subject}" to="${receipients}" from="${from}" 
      smtpHost="${smtpHost}" smtpPort="${smtpPort}" 
      smtpProtocol="${smtpProtocol}" smtpUsername="${smtpUser}" 
      smtpPassword="${smtpPassword}" smtpDebug="false" bufferSize="20"> 
     <PatternLayout> 
      <pattern>%d{dd-MM-yyyy HH:mm:ss,SSS} %5p %m%n</pattern> 
     </PatternLayout> 
    </SMTP> 

    <Async name="AsyncMailer"> 
     <AppenderRef ref="Mailer"/> 
    </Async> 
</Appenders> 
<Loggers> 
    <Root level="info"> 
     <AppenderRef ref="AsyncMailer" level="error"/> 
    </Root> 
</Loggers> 

С помощью этой конфигурации я получаю письмо с сообщением только 1 (один) ошибки. Как настроить log4j2 для получения 1 сообщения об ошибке и N предыдущих сообщений с LEVEL = INFO?

Заранее спасибо.

ответ

4

В настоящее время это невозможно: приложению SMTP есть buffer, где он регистрирует события журнала перед их отправкой по электронной почте, но он будет захватывать только события, настроенные для целевого уровня (ERROR в вашем примере). Если вы изменили это на INFO, вы получите уведомления по электронной почте для всех сообщений журнала уровня INFO (а не только тех, которые предшествуют сообщению уровня ERROR).

Вы можете поднять это как запрос функции в log4j issue tracker или в списке рассылки log4j.


Исправление: Я был неправильно, неправильно, неправильно!

У STMP Appender есть буфер, но он предназначен для захвата последних сообщений X (512 по умолчанию) INFO, DEBUG, TRACE, которые предшествовали событию журнала ERROR. Таким образом, он должен работать так, как вы ожидали (например, работает приложение SMTP log4j-1.x).

SMTP Appender отправит электронное письмо, когда оно получит сообщение об ошибке ERROR (или более серьезное). Таким образом, в вашей конфигурации вы должны не только отправлять события регистрации уровня ERROR этому приложению (или вы будете пропускать события INFO, DEBUG, TRACE, которые предшествуют ему).

В вашей конфигурации, измените <AppenderRef ref="AsyncMailer" level="error"/> на <AppenderRef ref="AsyncMailer"/>.

Это должно решить проблему. Если вы по-прежнему возникают проблемы, кто-то еще reported подобный вопрос и, видимо, нашел обходной путь, добавив ThresholdFilter конфигурации:

<Appenders> 
    <SMTP name="Mailer" suppressExceptions="false" 
      subject="${subject}" to="${receipients}" from="${from}" 
      smtpHost="${smtpHost}" smtpPort="${smtpPort}" 
      smtpProtocol="${smtpProtocol}" smtpUsername="${smtpUser}" 
      smtpPassword="${smtpPassword}" smtpDebug="false" bufferSize="20"> 

     <ThresholdFilter level="debug" onMatch="NEUTRAL" onMismatch="DENY" /> 
     <PatternLayout> 
      <pattern>%d{dd-MM-yyyy HH:mm:ss,SSS} %5p %m%n</pattern> 
     </PatternLayout> 
    </SMTP> 

    <Async name="AsyncMailer"> 
     <AppenderRef ref="Mailer"/> 
    </Async> 
</Appenders> 
<Loggers> 
    <Root level="info"> 
     <AppenderRef ref="AsyncMailer" /> 
    </Root> 
</Loggers> 
+0

Спасибо за ответ. Я только начал думать, что такое поведение в log4j (1.2) со следующими параметрами конфигурации: log4j.rootLogger = ERROR, адрес электронной почты log4j.appender.email.BufferSize = 10 была ошибка. Потому что я получаю электронную почту при каждой ошибке с 9 событиями INFO и 1 (последнее событие) ERROR. – hypet

+0

Извинения за неправильный ответ. –

+0

Фантастический! Работает как очарование! Большое спасибо! Я просто удалил level = "error" из , как вы сказали, и он начал работать. Большое спасибо! – hypet