#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"/>
? Если это не сработает, то, скорее всего, уровень событий, включенных в буфер, не настраивается. Вероятно, вам придется написать пользовательское приложение, чтобы делать то, что вы хотите.