1前書き

今日のほとんどのJavaロギングライブラリは、ログをフォーマットするためのさまざまなレイアウトオプションを提供します – 各プロジェクトのニーズに正確に合うように。

このクイック記事では、ログエントリをJSONとしてフォーマットして出力します。最も広く使用されている2つのロギングライブラリ

Log4j2



Logback

に対してこれを実行する方法を説明します。

どちらもJSON形式でログを表すために

Jackson

を内部的に使用します。

これらのライブラリの概要については、私たちのリンクを見てください:/java-logging-intro[Java Loggingの記事の紹介]。


2 Log4j2


Log4j2

は、Javaで最も人気のあるロギングライブラリLog4Jの直接の後継です。

これはJavaプロジェクトの新しい標準なので、JSONを出力するように構成する方法を示します。


2.1. 依存関係

まず、


_ pom .

_

xmlファイルに次の依存関係を含める必要があります。

<dependencies>
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-core</artifactId>
        <version>2.10.0</version>
    </dependency>

    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
        <version>2.9.3</version>
    </dependency>

</dependencies>

以前の依存関係の最新バージョンはMaven Centralにあります。


2.2. 構成

次に、

__ log4j2 .


xmlファイルに、

JsonLayout

を使用する新しい

Appender

と、この

Appender

を使用する新しい

Logger__を作成します。

<Appenders>
    <Console name="ConsoleJSONAppender" target="SYSTEM__OUT">
        <JsonLayout complete="false" compact="false">
            <KeyValuePair key="myCustomField" value="myCustomValue"/>
        </JsonLayout>
    </Console>
</Appenders>

<Logger name="CONSOLE__JSON__APPENDER" level="TRACE" additivity="false">
    <AppenderRef ref="ConsoleJSONAppender"/>
</Logger>

サンプルの設定からわかるように、

KeyValuePair

を使用してログに独自の値を追加することができます。これはログコンテキストの検索もサポートします。


compact

パラメータを

false

に設定すると、出力のサイズが大きくなりますが、人間にとって読みやすくなります。


2.3. Log4j2

を使う

コードでは、新しいJSONロガーをインスタンス化し、新しいデバッグレベルのトレースを作成できます。

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

前のコードのデバッグ出力メッセージは次のようになります。

{
  "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ログバック


Logback

はLog4Jの別の後継と見なすことができます。これは同じ開発者によって書かれたもので、前任者よりも効率的で速いと主張しています。

それでは、ログの出力をJSON形式で取得するように設定する方法を見てみましょう。


3.1. 依存関係


pom.xml

に次の依存関係を含めます。

<dependencies>
    <dependency>
        <groupId>ch.qos.logback</groupId>
        <artifactId>logback-classic</artifactId>
        <version>1.1.7</version>
    </dependency>

    <dependency>
        <groupId>ch.qos.logback.contrib</groupId>
        <artifactId>logback-json-classic</artifactId>
        <version>0.1.5</version>
    </dependency>

    <dependency>
        <groupId>ch.qos.logback.contrib</groupId>
        <artifactId>logback-jackson</artifactId>
        <version>0.1.5</version>
    </dependency>

    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
        <version>2.9.3</version>
    </dependency>
</dependencies>

これらの依存関係の最新バージョンについては、ここで確認できます。


logback-classic

、https://search.maven.org/classic/#search%7Cga%7C1%7Cg%3A%22ch.qos.logback.contrib%22%20AND%20a%3A%22logback-json-classic%22[logback-json-classic]、https://search.maven.org/classic/#search%7Cga%7C1%7Cg%3A%22ch.qos.logback.contrib%22%20AND%20a%3A%22logback-jackson%22[logback-jackson]、https://search.maven.org/classic/#search%7Cga%7C1%7Cg%3A%22com.fasterxml.jackson.core%22%20AND%20a%3A%22jackson-databind%22[jackson-databind]


3.2. 構成

まず、

logson.xmlに

JsonLayout



JacksonJsonFormatter.

を使用して新しい

appender__を作成します。

その後、この

appender

を使用する新しい

logger

を作成できます。

<appender name="json" class="ch.qos.logback.core.ConsoleAppender">
    <layout class="ch.qos.logback.contrib.json.classic.JsonLayout">
        <jsonFormatter
            class="ch.qos.logback.contrib.jackson.JacksonJsonFormatter">
            <prettyPrint>true</prettyPrint>
        </jsonFormatter>
        <timestampFormat>yyyy-MM-dd' 'HH:mm:ss.SSS</timestampFormat>
    </layout>
</appender>

<logger name="jsonLogger" level="TRACE">
    <appender-ref ref="json"/>
</logger>

ご覧のとおり、パラメータ

prettyPrint

は人間が読めるJSONを取得するために有効になっています。


3.3. ログバックを使用する

コードでロガーをインスタンス化し、デバッグメッセージを記録しましょう。

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

これで – 次のような出力が得られます。

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


4結論

ここではLog4j2を簡単に設定する方法とLogbackにJSON出力形式を設定する方法を説明しました。解析の複雑さをすべてロギングライブラリに委譲したので、既存のロガー呼び出しを変更する必要はありません。

いつものように、この記事のコードはGitHub

ここ

およびhttps://github.com/eugenp/tutorials/tree/から入手できます。 master/logging-modules/logback[ここ]。