Obtenir la sortie du journal en JSON

Obtenir une sortie de journal en JSON

1. introduction

Aujourd'hui, la plupart des bibliothèques de journalisation Java offrent différentes options de mise en forme pour la mise en forme des journaux, afin de répondre précisément aux besoins de chaque projet.

Dans cet article rapide, nous souhaitons formater et exporter nos entrées de journal au format JSON. Nous allons voir comment procéder pour les deux bibliothèques de journalisation les plus utilisées:Log4j2 etLogback.

Les deux utilisentJackson en interne pour représenter les journaux au format JSON.

Pour une introduction à ces bibliothèques, jetez un œil à nosintroduction to Java Logging article.

2. Log4j2

Log4j2 est le successeur direct de la bibliothèque de journalisation la plus populaire pour Java, Log4J.

Comme il s'agit de la nouvelle norme pour les projets Java, nous allons montrer comment le configurer pour générer du JSON.

2.1. Les dépendances

Tout d'abord, nous devons inclure les dépendances suivantes dans notre fichierpom.xml:


    
        org.apache.logging.log4j
        log4j-core
        2.10.0
    

    
        com.fasterxml.jackson.core
        jackson-databind
        2.9.3
    

Les dernières versions des dépendances précédentes peuvent être trouvées sur Maven Central:log4j-api,log4j-core,jackson-databind.

2.2. Configuration

Ensuite, dans notre fichierlog4j2.xml, nous pouvons créer un nouveauAppender qui utiliseJsonLayout et un nouveauLogger qui utilise ceAppender:


    
        
            
        
    



    

Comme nous pouvons le voir dans l'exemple de configuration, il est possible d'ajouter nos propres valeurs au journal en utilisantKeyValuePair, qui prend même en charge la recherche dans le contexte du journal.

Régler le paramètrecompact surfalse augmentera la taille de la sortie mais la rendra également plus lisible par l'homme.

2.3. Utilisation de Log4j2

Dans notre code, nous pouvons maintenant instancier notre nouveau consignateur JSON et créer une nouvelle trace de niveau de débogage:

Logger logger = LogManager.getLogger("CONSOLE_JSON_APPENDER");
logger.debug("Debug message");

Le message de sortie de débogage pour le code précédent serait:

{
  "timeMillis" : 1513290111664,
  "thread" : "main",
  "level" : "DEBUG",
  "loggerName" : "CONSOLE_JSON_APPENDER",
  "message" : "My debug message",
  "endOfBatch" : false,
  "loggerFqcn" : "org.apache.logging.log4j.spi.AbstractLogger",
  "threadId" : 1,
  "threadPriority" : 5,
  "myCustomField" : "myCustomValue"
}

3. Déconnexion

Logback peut être considéré comme un autre successeur de Log4J. Il est écrit par les mêmes développeurs et prétend être plus efficace et plus rapide que son prédécesseur.

Voyons donc comment le configurer pour obtenir la sortie des journaux au format JSON.

3.1. Les dépendances

Incluons les dépendances suivantes dans nospom.xml:


    
        ch.qos.logback
        logback-classic
        1.1.7
    

    
        ch.qos.logback.contrib
        logback-json-classic
        0.1.5
    

    
        ch.qos.logback.contrib
        logback-jackson
        0.1.5
    

    
        com.fasterxml.jackson.core
        jackson-databind
        2.9.3
    

Nous pouvons vérifier ici les dernières versions de ces dépendances:logback-classic,logback-json-classic,logback-jackson,jackson-databind

3.2. Configuration

Tout d'abord, nous créons un nouveauappender dans notrelogback.xml qui utiliseJsonLayout etJacksonJsonFormatter.

Après cela, nous pouvons créer un nouveaulogger qui utilise ceappender:


    
        
            true
        
        yyyy-MM-dd' 'HH:mm:ss.SSS
    



    

Comme nous le voyons, le paramètreprettyPrint est activé pour obtenir un JSON lisible par l'homme.

3.3. Utilisation de Logback

Instancions le logger dans notre code et consignons un message de débogage:

Logger logger = LoggerFactory.getLogger("jsonLogger");
logger.debug("Debug message");

Avec ceci - nous obtiendrons le résultat suivant:

{
  "timestamp" : "2017-12-14 23:36:22.305",
  "level" : "DEBUG",
  "thread" : "main",
  "logger" : "jsonLogger",
  "message" : "Debug log message",
  "context" : "default"
}

4. Conclusion

Nous avons vu ici comment nous pouvons facilement configurer Log4j2 et Logback avec un format de sortie JSON. Nous avons délégué toute la complexité de l'analyse à la bibliothèque de journalisation, nous n'avons donc pas besoin de modifier les appels de journalisation existants.

Comme toujours, le code de cet article est disponible sur GitHubhere ethere.