JSONでログ出力を取得する
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[ここ]。