Настройка уровней журнала с помощью SMTPAppender

#logging #log4j2

#ведение журнала #log4j2

Вопрос:

Как включить только предупреждения и события более высокого уровня в приложение smtp?

SMTPAppender сохраняет в своем циклическом буфере только последние события ведения журнала bufferSize. Это позволяет поддерживать требования к памяти на разумном уровне, сохраняя при этом полезный контекст приложения. Все события в буфере включаются в электронное письмо. Буфер будет содержать самые последние события ТРАССИРОВКИ уровня для ПРЕДУПРЕЖДЕНИЯ, предшествующие событию, вызвавшему отправку электронного письма.

Поведение по умолчанию заключается в инициировании отправки электронного письма всякий раз, когда регистрируется ОШИБКА или событие более высокой степени серьезности, и форматировании его как HTML. Обстоятельствами отправки электронной почты можно управлять, установив один или несколько фильтров в приложении. Log4j2 SMTPAppender

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

Изменение самого уровня регистратора невозможно, поскольку события также должны обрабатываться другими добавляющими устройствами.

 <Appender>
    ....
    <SMTP name="Mail" subject="Error Log"
        to="${mailTo}" smtpHost="smtp.googlemail.com"
        smtpProtocol="smtps" smtpPort="465" bufferSize="512"
        smtpUsername="${smtpUsername}"
        smtpPassword="${smtpPassword}">
        <ThresholdFilter level="WARN" onMatch="ACCEPT" onMismatch="DENY"/>
    </SMTP>
    <Async name="AsyncMail">
        <AppenderRef ref="Mail" />
    </Async>
</Appenders>
<Loggers>
    <Logger name="com.github.kilianB" level="trace">
        <AppenderRef ref="STDOUT" />
        <AppenderRef ref="FILE" />
        <AppenderRef ref="AsyncMail" />
    </Logger>
</Loggers>
  

Комментарии:

1. Вы пробовали устанавливать уровень в приложении? Например <AppenderRef ref="AsyncMail" level="warn"/> ? Если это не сработает, то, скорее всего, уровень событий, включенных в буфер, не настраивается. Вероятно, вам придется написать пользовательское приложение, чтобы делать то, что вы хотите.