例外(ログレベル:ERROR)が発生したときに電子メールを送信するようにLogbackを構成しようとしています。これまでのところ、動作させることができませんでしたので、設定のお手伝いをお願いします。
いくつかの処理が行われるSpringブートアプリケーションがあります。
_private void foo() {
try {
// do something
} catch (Exception e) {
log.error("Logging my exception");
}
}
_
このエラーが記録されるたびにメールを送信したいと思います。私はいくつかの tutorials に従い、logback.xmlとsmtp-appender.xmlを追加しましたresources
ディレクトリに:
logback.xml
_<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<include resource="org/springframework/boot/logging/logback/base.xml" />
<include resource="smtp-appender.xml" />
<logger name="com.mycompany" level="DEBUG">
<appender-ref ref="SMTP" />
</logger>
</configuration>
_
smtp-appender.xml
_<?xml version="1.0" encoding="UTF-8"?>
<included>
<appender name="SMTP" class="ch.qos.logback.classic.net.SMTPAppender">
<smtpHost>xxx</smtpHost>
<username>user</username>
<password>password</password>
<to>[email protected]</to>
<from>[email protected]</from>
<subject>testError</subject>
<layout class="ch.qos.logback.classic.html.HTMLLayout" />
</appender>
</included>
_
sendmail
を介してlocalhostにローカルのsmtpserverをセットアップしました。 AWSのSMTPサーバーとGmailも試してみました。これまでのところ、これらのサービスはどれも機能しませんでした。
問題は、例外の後に電子メールを受信せず、ログバックに対応する出力(文字列log.error()
以外はもちろん)がないため、アプリケーションがそれについてさえ知らないということです。これらの設定ファイル...
これらはpom.xmlの私のmaven依存関係です:
_<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.2.5.RELEASE</version>
<relativePath />
<!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<Java.version>1.8</Java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.2</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>20141113</version>
</dependency>
<dependency>
<groupId>javax.mail</groupId>
<artifactId>mail</artifactId>
<version>1.4</version>
</dependency>
</dependencies>
_
任意の助けをいただければ幸いです。
Smtpappenderのポートのデフォルトエントリは25で、gmailはsmtpサービスに認証を使用しており、TLSにはポート587、SSLには465を使用する必要があります。
これはあなたの問題かもしれません。
最初に認証なしでローカルマシンにメールサーバーをセットアップしてみてください。次に、Gmail用に構成する方法を見つけてください。
ページから http://logback.qos.ch/manual/appenders.html#gmailSTARTTLS
<configuration>
<appender name="EMAIL" class="ch.qos.logback.classic.net.SMTPAppender">
<smtpHost>smtp.gmail.com</smtpHost>
<smtpPort>587</smtpPort>
<STARTTLS>true</STARTTLS>
<username>[email protected]</username>
<password>YOUR_GMAIL_xPASSWORD</password>
<to>EMAIL-DESTINATION</to>
<to>ANOTHER_EMAIL_DESTINATION</to> <!-- additional destinations are possible -->
<from>[email protected]</from>
<subject>TESTING: %logger{20} - %m</subject>
<layout class="ch.qos.logback.classic.PatternLayout">
<pattern>%date %-5level %logger - %message%n</pattern>
</layout>
</appender>
<root level="DEBUG">
<appender-ref ref="EMAIL" />
</root>
</configuration>
Plsには、エラーメールを取得するために、pom.xmlとlogback.xmlに(私の作業プロジェクトから)以下が含まれています。
pom.xml
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.6.4</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.0.1</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jcl-over-slf4j</artifactId>
<version>1.6.4</version>
</dependency>
<dependency>
<groupId>javax.mail</groupId>
<artifactId>mail</artifactId>
<version>1.4</version>
</dependency>
logback.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<appender name="errMailer" class="ch.qos.logback.classic.net.SMTPAppender">
<smtpHost>xxx</smtpHost>
<smtpPort>25</smtpPort>
<from>[email protected]</from>
<to>[email protected]</to>
<subjectStr>App Err Mail</subjectStr>
<layout class="ch.qos.logback.classic.html.HTMLLayout"/>
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>ERROR</level>
</filter>
</appender>
<root level="ERROR">
<appender-ref ref="errMailer" />
</root>
</configuration>
メールのマーカーベースのトリガーを有効にする必要があります。
sMTPアペンダーの下のlogback.xmlにエバリュエーターを含めます以下のリンクを参照してください
http://logback.qos.ch/manual/appenders.html#OnMarkerEvaluator
次に、例外キャッチブロックに以下のロジックを追加し、以下のようなメールを送信する場合は、Markerオブジェクトをロガーメソッドに渡します-
Marker notifyAdmin = MarkerFactory.getMarker("NOTIFY_ADMIN");
logger.error(notifyAdmin,
"This is a serious an error requiring the admin's attention",
new Except
ion("Just testing"));
一部のシナリオでは、電子メールを送信せず、例外をログに記録するだけで、Markerオブジェクトをロガーメソッドに渡さないことが可能です。
logger.error("This is a serious an error requiring the admin's attention",
new Except
ion("Just testing"));