devstory

Utiliser Logging dans Spring Boot

  1. L'objectif de la leçon
  2. Créer un projet Spring Boot
  3. Logging Level
  4. Logging File
  5. Logging Pattern

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'applicationSpring 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.
  • TRACE
  • DEBUG
  • INFO
  • WARN
  • ERROR
  • FATAL
  • 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 :
  • logging.pattern.console
  • 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

Tutoriels Spring Boot

Show More