web-dev-qa-db-fra.com

Spring Boot - envoi d’e-mails avec Logback

J'essaie de configurer Logback pour envoyer des emails chaque fois qu'une exception (niveau de journalisation: ERROR) se produit. Je n'ai pas encore réussi à le faire fonctionner, alors j'aimerais vous demander votre aide pour la configuration.

J'ai une application de démarrage Spring où certains traitements sont effectués:

private void foo() {
 try {
  // do something
 } catch (Exception e) {
  log.error("Logging my exception");
 }
}

Je voudrais déclencher un email chaque fois que cette erreur est enregistrée. J'ai suivi quelques tutoriels et j’ai ajouté logback.xml et smtp-appender.xml à mon répertoire 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>

J'ai installé le smtpserver local sur localhost via sendmail. J'ai également essayé avec le serveur AWS smtp et Gmail. Aucun de ces services n'a fonctionné pour moi jusqu'à présent.

Le problème est que je ne reçois aucun email après l'exception et qu'il n'y a littéralement aucune sortie correspondant à la consignation (hormis la sortie log.error(), bien sûr), ce qui me fait penser que l'application ne connaît même pas ces fichiers de configuration ...

Voici mes dépendances maven dans 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>

Toute aide serait très appréciée.

25
Smajl

L'entrée par défaut du port dans smtpappender est 25, Gmail utilise l'authentification pour les services SMTP et vous devez utiliser les ports 587 pour TLS et 465 pour SSL.

Je dirais que cela pourrait être votre problème.

Essayez d’abord d’installer le serveur de messagerie sur votre ordinateur local sans authentification, puis essayez si vous avez ajouté les travaux. puis essayez de trouver comment le configurer pour gmail. 

De la page http://logback.qos.ch/manual/appenders.html#gmailSTARTTLS

SMTPAppender for 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>
3
user902383

Pls inclut la suite (de mon projet de travail) sur pom.xml & logback.xml afin d’obtenir un message d’erreur: -

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>
3
Avis

Vous devez activer le déclenchement de courrier électronique basé sur des marqueurs.

inclure un évaluateur dans votre fichier logback.xml sous Appender SMTP référez-vous au lien ci-dessous

http://logback.qos.ch/manual/appenders.html#OnMarkerEvaluator

puis ajoutez la logique ci-dessous dans votre bloc catch d’exception, passez objet Marker à la méthode logger si vous souhaitez envoyer un courrier électronique comme ci-dessous -

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

il est possible que, dans certains cas, vous ne vouliez pas envoyer d'email et ne vouliez que consigner l'exception, alors ne transmettez pas l'objet Marqueur à la méthode de consignation.

logger.error("This is a serious an error requiring the admin's attention",
   new Except
ion("Just testing"));
0
Somnath Goswami