[英]Spring boot - sending emails with Logback
我试图将Logback配置为在发生异常(记录级别:ERROR)时发送电子邮件。 到目前为止,我还无法使它正常工作,因此我想向您寻求有关配置的帮助。
我有一个Spring Boot应用程序,其中已完成一些处理:
private void foo() {
try {
// do something
} catch (Exception e) {
log.error("Logging my exception");
}
}
每当记录此错误时,我想触发一封电子邮件。 我遵循了一些教程 ,并将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>test@email.com</to>
<from>me@email.com</from>
<subject>testError</subject>
<layout class="ch.qos.logback.classic.html.HTMLLayout" />
</appender>
</included>
我已经通过sendmail
在本地主机上设置了本地smtpserver。 我也尝试过使用AWS smtp服务器和Gmail。 到目前为止,这些服务都没有对我有用。
问题是异常发生后我没有收到任何电子邮件,并且字面上没有对应于logback的输出(当然,除了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服务使用身份验证,您需要将端口587用于TLS,将465用于SSL。
我想这可能是您的问题。
尝试先在本地计算机上设置邮件服务器而不进行身份验证,然后尝试添加附件。 然后尝试找到如何为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>YOUR_USERNAME@gmail.com</username>
<password>YOUR_GMAIL_xPASSWORD</password>
<to>EMAIL-DESTINATION</to>
<to>ANOTHER_EMAIL_DESTINATION</to> <!-- additional destinations are possible -->
<from>YOUR_USERNAME@gmail.com</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>
请在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>me@gmail.com</from>
<to>you@gmail.com</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>
您必须启用基于标记的电子邮件触发。
在您的logback.xml中的SMTP附加程序下包含一个评估程序,请参见下面的链接
http://logback.qos.ch/manual/appenders.html#OnMarkerEvaluator
然后在您的Exception catch块中添加以下逻辑,如果要发送如下所示的电子邮件,请将Marker对象传递给logger方法-
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方法。
logger.error("This is a serious an error requiring the admin's attention",
new Except
ion("Just testing"));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.