springprofile name example java logging spring-boot

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"));