java - name - Spring boot: envío de correos electrónicos con Logback
spring boot log4j (3)
Estoy intentando configurar Logback para enviar correos electrónicos siempre que ocurra una excepción (nivel de registro: ERROR). No he podido hacerlo funcionar hasta el momento, así que me gustaría pedirle ayuda con la configuración.
Tengo una aplicación de inicio de Spring donde se realiza algún procesamiento:
private void foo() {
try {
// do something
} catch (Exception e) {
log.error("Logging my exception");
}
}
Me gustaría activar un correo electrónico cada vez que se registra este error. Seguí algunos tutorials y agregué logback.xml y smtp-appender.xml a mi directorio de 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>
Configuré smtpserver local en localhost a través de sendmail
. También lo intenté con AWS smtp server y Gmail. Ninguno de estos servicios me funcionó hasta ahora.
El problema es que no recibo ningún correo electrónico después de la excepción y literalmente no hay salida correspondiente al logback (además de la salida log.error()
, por supuesto) lo que me hace pensar que la aplicación ni siquiera sabe acerca de estas configuraciones archivos ...
Estas son mis dependencias maven en pom.xml :
<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>
Cualquier ayuda sería muy apreciada.
La entrada predeterminada para el puerto en smtpappender es 25, gmail está utilizando autenticación para servicios smtp, y necesita usar los puertos 587 para TLS y 465 para SSL.
Yo diría que este podría ser tu problema.
Intenta configurar el servidor de correo en tu máquina local primero sin autenticación, y prueba tus trabajos adjuntos. luego intenta encontrar cómo configurarlo para Gmail.
Desde la página http://logback.qos.ch/manual/appenders.html#gmailSTARTTLS
SMTPAppender para Gmail (STARTTLS)
<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>
Los pls incluyen los siguientes (de mi proyecto de trabajo) en pom.xml y logback.xml para obtener un mensaje de error: -
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>
Tienes que habilitar la activación del correo electrónico basado en Marker.
incluya un evaluador en su logback.xml en el apéndice SMTP consulte el enlace a continuación
http://logback.qos.ch/manual/appenders.html#OnMarkerEvaluator
a continuación, agregue la lógica siguiente en el bloque catch Exception, pase el método Marker object to logger si desea enviar un correo electrónico como a continuación -
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"));
es posible que en algunos casos no desee enviar un correo electrónico y solo desee registrar la excepción, simplemente no pase el objeto Marker al método logger.
logger.error("This is a serious an error requiring the admin''s attention",
new Except
ion("Just testing"));