1. Обзор
Logback — одна из самых популярных сред ведения журналов для приложений на основе Java. Он имеет встроенную поддержку расширенной фильтрации, архивирования и удаления старых файлов журнала, а также отправки сообщений журнала по электронной почте.
В этом кратком руководстве мы настроим Logback для отправки уведомлений по электронной почте о любых ошибках приложения.
2. Настройка
Функция уведомления по электронной почте Logback требует использования SMTPAppender.
SMTPAppender использует
Java Mail API, который, в свою очередь, зависит от JavaBeans Activation Framework.
Давайте добавим эти зависимости в наш POM
:
<dependency>
<groupId>javax.mail</groupId>
<artifactId>mail</artifactId>
<version>1.4.7</version>
</dependency>
<dependency>
<groupId>javax.activation</groupId>
<artifactId>activation</artifactId>
<version>1.1.1</version>
<scope>runtime</scope>
</dependency>
Мы можем найти последние версии Java Mail API и JavaBeans Activation Framework на Maven Central.
3. Настройка SMTPAppender
SMTPAppender Logback
по умолчанию запускает электронное письмо при регистрации события ERROR .
Он хранит все события регистрации в циклическом буфере с максимальной емкостью по умолчанию 256 событий. Когда буфер заполняется, он отбрасывает все старые события журнала.
Давайте настроим SMTPAppender
в нашем logback.xml
:
<appender name="emailAppender" class="ch.qos.logback.classic.net.SMTPAppender">
<smtpHost>OUR-SMTP-HOST-ADDRESS</smtpHost>
<!-- one or more recipients are possible -->
<to>EMAIL-RECIPIENT-1</to>
<to>EMAIL-RECIPIENT-2</to>
<from>SENDER-EMAIL-ADDRESS</from>
<subject>FOREACH: %logger{20} - %msg</subject>
<layout class="ch.qos.logback.classic.PatternLayout">
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{35} - %msg%n</pattern>
</layout>
</appender>
Кроме того, мы добавим это дополнение к корневому
элементу нашей конфигурации Logback :
<root level="INFO">
<appender-ref ref="emailAppender"/>
</root>
В результате для любого приложения ERROR
, которое регистрируется, оно отправит электронное письмо со всеми буферизованными событиями регистрации, отформатированными с помощью PatternLayout
.
Далее мы можем заменить PatternLayout
на HTMLLayout
для форматирования сообщений журнала в таблице HTML:
4. Пользовательский размер буфера
Теперь мы знаем, что по умолчанию исходящая электронная почта будет содержать последние 256 сообщений о событиях регистрации . Однако мы можем настроить это поведение, включив конфигурацию cycleBufferTracker
и указав желаемый размер буфера
.
Для запуска уведомления по электронной почте, которое будет включать только последние пять событий регистрации, у нас будет:
<appender name="emailAppender" class="ch.qos.logback.classic.net.SMTPAppender">
<smtpHost>OUR-SMTP-HOST-ADDRESS</smtpHost>
<to>EMAIL-RECIPIENT</to>
<from>SENDER-EMAIL-ADDRESS</from>
<subject>FOREACH: %logger{20} - %msg</subject>
<layout class="ch.qos.logback.classic.html.HTMLLayout"/>
<cyclicBufferTracker class="ch.qos.logback.core.spi.CyclicBufferTracker">
<bufferSize>5</bufferSize>
</cyclicBufferTracker>
</appender>
5. SMTPAppender
для Gmail
Если мы используем Gmail в качестве нашего SMTP-провайдера, нам придется проходить аутентификацию через SSL или STARTTLS.
Чтобы установить соединение через STARTTLS, клиент сначала отправляет серверу команду STARTTLS. Если сервер поддерживает эту связь, соединение затем переключается на SSL.
Давайте теперь настроим наш аппендер для Gmail с помощью STARTTLS:
<appender name="emailAppender" class="ch.qos.logback.classic.net.SMTPAppender">
<smtpHost>smtp.gmail.com</smtpHost>
<smtpPort>587</smtpPort>
<STARTTLS>true</STARTTLS>
<asynchronousSending>false</asynchronousSending>
<username>SENDER-EMAIL@gmail.com</username>
<password>GMAIL-ACCT-PASSWORD</password>
<to>EMAIL-RECIPIENT</to>
<from>SENDER-EMAIL@gmail.com</from>
<subject>FOREACH: %logger{20} - %msg</subject>
<layout class="ch.qos.logback.classic.html.HTMLLayout"/>
</appender>
6. Заключение
В этой статье мы рассмотрели, как настроить SMTPAppender Logback
для отправки электронных писем в случае ошибки приложения.
Как обычно, все образцы кода доступны на Github .