LoginSignup
1
2

More than 5 years have passed since last update.

logbackのSMTPAppenderでERRORレベルのログ発生時にメール送信

Posted at

やること

FakeSMTPのインストール

FakeSMTP – FakeSMTP - Dummy SMTP server for developers

開発用のダミーSMTPサーバをインストールして起動しておく。

pom.xml

pom.xml
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.1.RELEASE</version>
    </parent>

    <dependencies>
        <dependency>
            <groupId>javax.mail</groupId>
            <artifactId>mail</artifactId>
            <version>1.4.7</version>
        </dependency>
    </dependencies>

logback.xml

logback ドキュメント 第4章 アペンダー#SMTPAppenderを参考にlogback.xmlを編集する。

src\main\resources\logback.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <include resource="org/springframework/boot/logging/logback/base.xml" />

    <appender name="EMAIL" class="ch.qos.logback.classic.net.SMTPAppender">
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>ERROR</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
        <smtpHost>localhost</smtpHost>
        <smtpPort>25</smtpPort>
        <to>hoge@hoge.com</to>
        <to>foo@foo.com</to>
        <from>sender@hoge.com</from>
        <subject>TESTING: %logger{20} - %m</subject>
        <layout class="ch.qos.logback.classic.PatternLayout">
            <pattern>%date %-5level %logger{35} - %message%n</pattern>
        </layout>
        <STARTTLS>true</STARTTLS>
        <asynchronousSending>false</asynchronousSending><!-- 後述 -->
    </appender>

    <root level="DEBUG">
        <appender-ref ref="EMAIL" />
    </root>
</configuration>

asynchronousSending=falseについては後述。

動作確認用のサンプルプコード

適当なspring-bootアプリケーションを作る。

HogeApplication.java
package kagamihoge.logmailsend;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class HogeApplication implements CommandLineRunner {
    public static void main(String[] args) {
        SpringApplication.run(HogeApplication.class, args).close();
    }

    Logger logger = LoggerFactory.getLogger(HogeApplication.class);

    @Override
    public void run(String... args) throws Exception {
        logger.info("debug");
        logger.info("info");
        logger.error("error");
        logger.error("error with exception", new NullPointerException());
    }
}

実行の様子

logback-smtp.jpg

asynchronousSending=falseについて

動作確認用のサンプルプコードはmainを起動してすぐ終了するので、logbackがメール送信するよりも先にmainが終了してしまう。そのため、非同期送信モードをfalseにしないとメール送信が行われない。

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2