Protokollausgabe in JSON abrufen

Protokollausgabe in JSON abrufen

1. Einführung

Die meisten Java-Protokollierungsbibliotheken bieten heute verschiedene Layoutoptionen zum Formatieren von Protokollen, um den Anforderungen jedes Projekts genau zu entsprechen.

In diesem kurzen Artikel möchten wir unsere Protokolleinträge als JSON formatieren und ausgeben. Wir werden sehen, wie dies für die beiden am häufigsten verwendeten Protokollierungsbibliotheken getan wird:Log4j2 undLogback.

Beide verwendenJackson intern zur Darstellung von Protokollen im JSON-Format.

Eine Einführung in diese Bibliotheken finden Sie in unserenintroduction to Java Logging article.

2. Log4j2

Log4j2 ist der direkte Nachfolger der beliebtesten Protokollierungsbibliothek für Java, Log4J.

Da es sich um den neuen Standard für Java-Projekte handelt, zeigen wir, wie Sie ihn für die Ausgabe von JSON konfigurieren.

2.1. Abhängigkeiten

Zuerst müssen wir die folgenden Abhängigkeiten in unserepom.xml-Datei aufnehmen:


    
        org.apache.logging.log4j
        log4j-core
        2.10.0
    

    
        com.fasterxml.jackson.core
        jackson-databind
        2.9.3
    

Die neuesten Versionen der vorherigen Abhängigkeiten finden Sie in Maven Central:log4j-api,log4j-core,jackson-databind.

2.2. Aufbau

Dann können wir in unsererlog4j2.xml-Datei ein neuesAppender erstellen, dasJsonLayout verwendet, und ein neuesLogger, das diesesAppender verwendet:


    
        
            
        
    



    

Wie wir in der Beispielkonfiguration sehen können, ist es möglich, mitKeyValuePair eigene Werte zum Protokoll hinzuzufügen, was sogar das Ausblicken in den Protokollkontext unterstützt.

Wenn Sie den Parametercompact auffalse setzen, wird die Ausgabe vergrößert, aber auch besser lesbar.

2.3. Verwenden von Log4j2

In unserem Code können wir jetzt unseren neuen JSON-Logger instanziieren und einen neuen Debug-Level-Trace erstellen:

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

Die Debug-Ausgabemeldung für den vorherigen Code lautet:

{
  "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. Wieder anmelden

Logback kann als ein weiterer Nachfolger von Log4J angesehen werden. Es wurde von denselben Entwicklern geschrieben und behauptet, effizienter und schneller als sein Vorgänger zu sein.

Schauen wir uns also an, wie Sie es konfigurieren, um die Ausgabe der Protokolle im JSON-Format zu erhalten.

3.1. Abhängigkeiten

Nehmen wir folgende Abhängigkeiten in unserepom.xmlauf:


    
        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
    

Wir können hier nach den neuesten Versionen dieser Abhängigkeiten suchen:logback-classic,logback-json-classic,logback-jackson,jackson-databind

3.2. Aufbau

Zuerst erstellen wir ein neuesappender in unseremlogback.xml, dasJsonLayout undJacksonJsonFormatter. verwendet

Danach können wir ein neueslogger erstellen, das diesesappender verwendet:


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



    

Wie wir sehen, ist der ParameterprettyPrint aktiviert, um einen für Menschen lesbaren JSON zu erhalten.

3.3. Logback verwenden

Lassen Sie uns den Logger in unserem Code instanziieren und eine Debug-Nachricht protokollieren:

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

Damit erhalten wir die folgende Ausgabe:

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

4. Fazit

Wir haben hier gesehen, wie wir Log4j2 einfach konfigurieren können und Logback ein JSON-Ausgabeformat hat. Wir haben die gesamte Komplexität des Parsens an die Protokollierungsbibliothek delegiert, sodass wir keine vorhandenen Protokollierungsaufrufe ändern müssen.

Wie immer ist der Code für diesen Artikel auf GitHubhere undhere verfügbar.