«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>BAELDUNG: %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>BAELDUNG: %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.

Давайте теперь настроим наш Appender для 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>[email protected]</username>
    <password>GMAIL-ACCT-PASSWORD</password>
    <to>EMAIL-RECIPIENT</to>
    <from>[email protected]</from>
    <subject>BAELDUNG: %logger{20} - %msg</subject>
    <layout class="ch.qos.logback.classic.html.HTMLLayout"/>
</appender>

6. Заключение

В этой статье мы рассмотрели, как настроить SMTPAppender Logback для отправки электронных писем в случае ошибки приложения.

Как обычно, все образцы кода доступны на Github.