1. 概要

Logback は、Javaベースのアプリケーションで最も人気のあるロギングフレームワークの1つです。 高度なフィルタリング、古いログファイルのアーカイブと削除、および電子メールによるログメッセージの送信のサポートが組み込まれています。

このクイックチュートリアルでは、アプリケーションエラーの電子メール通知を送信するようにログバックを構成します。

2. 設定

Logbackの電子メール通知機能では、SMTPAppenderを使用する必要があります。 SMTPAppender は、Java Mail APIを使用します。これは、Java BeansActivationFrameworkに依存します。

これらの依存関係を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 MailAPIおよびJavaBeansActivationFrameworkの最新バージョンはMavenCentralにあります。

3. SMTPAppenderの構成

LogbackのSMTPAppenderは、デフォルトで、ERRORイベントをログに記録するときに電子メールをトリガーします。

すべてのロギングイベントを、デフォルトの最大容量256イベントの循環バッファに保持します。 バッファがいっぱいになると、古いログイベントはすべて破棄されます。

logback.xmlSMTPAppenderを構成しましょう。

<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>

また、このアペンダーをログバック構成のroot要素に追加します。

<root level="INFO">
    <appender-ref ref="emailAppender"/>
</root>

その結果、ログに記録されるアプリケーションERRORについては、PatternLayoutでフォーマットされたすべてのバッファリングされたログイベントを含む電子メールが送信されます。

さらに、PatternLayoutHTMLLayoutに置き換えて、ログメッセージをHTMLテーブルにフォーマットすることができます。

4. カスタムバッファサイズ

デフォルトでは、送信メールに最後の256件のログイベントメッセージが含まれることがわかりました。 ただし、 cyclicBufferTracker 構成を含め、目的の bufferSize を指定することで、この動作をカスタマイズできます。

最新の5つのログイベントのみを含む電子メール通知をトリガーするために、次のようにします。

<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. Gmail用のSMTPAppender

SMTPプロバイダーとしてGmailを使用している場合は、SSLまたはSTARTTLSを介して認証する必要があります。

STARTTLSを介して接続を確立するために、クライアントは最初にサーバーにSTARTTLSコマンドを発行します。 サーバーがこの通信をサポートしている場合、接続はSSLに切り替わります。

STARTTLSを使用してGmailのアペンダーを構成しましょう。

<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. 結論

この記事では、アプリケーションエラーが発生した場合に電子メールを送信するためにLogbackのSMTPAppenderを構成する方法について説明しました。

いつものように、すべてのコードサンプルはGithub利用できます。