Utilisation de Logging en Spring Boot

View more Tutorials:

1- L'objectif de la leçon

"Logging" est simplement compris comme "l'enregistrement" des problèmes pendant le fonctionnement des applications. Les problèmes ici sont des erreurs, des avertissements (warning) et d'autres informations,....... Ces informations peuvent être affichées sur l'écran de la Console ou enregistrées dans des fichiers. 
Lorsque vous exécutez l'application Spring Boot directement sur  Eclipse vous pouvez voir les informations sur la fenêtre  Console. Ces informations vous montrent l'état de l'application, les erreurs survenant pendant l'exécution de l'application. C'est ​​​​​​​ Logging!.
Il y a beaucoup de bibliothèques  Logging différentes telles que  Logback, Log4j2, JUL,.. Spring Boot peut travailler avec toutes ces bibliothèques. Par défaut,  Spring Boot a automatiquement configuré et utilisé la bibliothèque Logback pour son  logging, et vous n'avez pas besoin d'autres configurations, sauf que vous souhaitez personnaliser certains arguments. Les personnalisations ici peuvent consister à spécifier le nom du fichier pour écrire des informations, des motifs (pattern), ...
Dans cette leçon, nous allons discuter du principe de fonctionnement de Logback dans l'application Spring Boot, et apprendre comment personnaliser la manière de Logback.
Les propriétés (properties) peuvent être personnalisées par vous :
logging.config
logging.exception-conversion-word
logging.file
logging.level.*
logging.path
logging.pattern.console
logging.pattern.file
logging.pattern.level
logging.register-shutdown-hook

2- Créer un projet Spring Boot

Sur Eclipse, créez un projet Spring Boot.
Pour utiliser  Logging, vous devez utiliser un des  "Starter" suivants :
  • spring-boot-starter-logging
  • spring-boot-starter-web
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
    http://maven.apache.org/xsd/maven-4.0.0.xsd">
    
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.o7planning</groupId>
    <artifactId>SpringBootDefaultLogging</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>SpringBootDefaultLogging</name>
    <description>Spring Boot +Default Logging</description>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.0.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <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-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>
MainController.java
package org.o7planning.sblogging.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

@Controller
public class MainController {

    private static final Logger LOGGER = LoggerFactory.getLogger(MainController.class);

    @ResponseBody
    @RequestMapping(path = "/")
    public String home() {

        LOGGER.trace("This is TRACE");
        LOGGER.debug("This is DEBUG");
        LOGGER.info("This is INFO");
        LOGGER.warn("This is WARN");
        LOGGER.error("This is ERROR");

        return "Hi, show loggings in the console or file!";
    }
    
}
Exécutez votre application directement sur Spring Boot, puis visitez le lien suivant :
Sur la fenêtre  Console de  Eclipse vous pouvez voir les informations  Logs comme ci-dessous :
2018-01-14 13:21:57.593  INFO 7980 --- [nio-8080-exec-6] o.o.sblogging.controller.MainController  : This is INFO
2018-01-14 13:21:57.593  WARN 7980 --- [nio-8080-exec-6] o.o.sblogging.controller.MainController  : This is WARN
2018-01-14 13:21:57.593 ERROR 7980 --- [nio-8080-exec-6] o.o.sblogging.controller.MainController  : This is ERROR
 

3- Logging Level

En fonction de la gravité du problème, Logback divise les informations à enregistrer en 5 niveaux (Level), le plus faible étant TRACE et le plus sévère ERROR. Remarque : Certaines bibliothèques Logging divisent les informations à enregistrer en 7 niveaux différents. 
  1. TRACE
  2. DEBUG
  3. INFO
  4. WARN
  5. ERROR
  6. FATAL
  7. OFF
Par défaut, Spring Boot n'enregistre que les informations dont la gravité est égale ou supérieure à INFO.
# Default:

logging.level.root=INFO
Changez le  Logging Level dans  application.properties :
* application.properties *
logging.level.root=WARN

# ..
Réexécutez votre application, et voyez les informations écrites dans la fenêtre Console :
2018-01-14 17:45:50.341  WARN 8500 --- [nio-8080-exec-1] o.o.sblogging.controller.MainController  : This is WARN
2018-01-14 17:45:50.342 ERROR 8500 --- [nio-8080-exec-1] o.o.sblogging.controller.MainController  : This is ERROR

4- Logging File

Les informations logging par défaut sont écrites sur l'écran de la Console, cependant, vous pouvez les configurer pour qu'elles soient écrites dans des fichiers.
* application.properties *
logging.file=logs/mylog.log
Relancez votre application directement sur Eclipse, puis accédez au lien suivant :
Puis rafraîchissez à nouveau le projet, vous pouvez voir le fichier  logging créé.

5- Logging Pattern

Les enregistrements Log (Log record) sont écrits selon un modèle (pattern). Ci-dessous se trouve un modèle (pattern) par défaut :
Et vous pouvez changer "Logging pattern" en personnalisant les propriétés (properties) suivantes :
  1. logging.pattern.console
  2. logging.pattern.file
# Pattern:

logging.pattern.console= %d{yyyy-MMM-dd HH:mm:ss.SSS} %-5level [%thread] %logger{15} - %msg%n

# Output:

2018-Jan-17 01:58:49.958 WARN  [http-nio-8080-exec-1] o.o.s.c.MainController - This is WARN
2018-Jan-17 01:58:49.960 ERROR [http-nio-8080-exec-1] o.o.s.c.MainController - This is ERROR
 
# Pattern:

logging.pattern.console= %d{dd/MM/yyyy HH:mm:ss.SSS} %-5level [%thread] %logger{115} - %msg%n

# Output:

17/01/2018 02:15:15.052 WARN  [http-nio-8080-exec-1] org.o7planning.sblogging.controller.MainController - This is WARN
17/01/2018 02:15:15.054 ERROR [http-nio-8080-exec-1] org.o7planning.sblogging.controller.MainController - This is ERROR
# Pattern:

logging.pattern.console=%d{yy-MMMM-dd HH:mm:ss:SSS} %5p %t %c{2}:%L - %m%n

# Output:

18-January-17 02:21:20:317  WARN http-nio-8080-exec-1 o.o.s.c.MainController:22 - This is WARN
18-January-17 02:21:20:320 ERROR http-nio-8080-exec-1 o.o.s.c.MainController:23 - This is ERROR
 

View more Tutorials: