ロギング設定
Read about the use of logging API in Quarkus, configuring logging output, and using logging adapters to unify the output from other logging APIs.
Quarkusは、JBoss Log Managerロギングバックエンドを使用して、アプリケーションとフレームワークのログを発行します。 Quarkusは、JBoss Logging APIと他の複数のロギングAPIをサポートしており、JBoss Log Managerとシームレスに統合されています。 以下のAPI のいずれも使用できます:
アプリケーションのロギングに JBoss Logging を使用
When using the JBoss Logging API, your application requires no additional dependencies, as Quarkus automatically provides it.
import org.jboss.logging.Logger;
import jakarta.ws.rs.GET;
import jakarta.ws.rs.Path;
import jakarta.ws.rs.Produces;
import jakarta.ws.rs.core.MediaType;
@Path("/hello")
public class ExampleResource {
private static final Logger LOG = Logger.getLogger(ExampleResource.class);
@GET
@Produces(MediaType.TEXT_PLAIN)
public String hello() {
LOG.info("Hello");
return "hello";
}
}
JBoss Logging はログメッセージを直接 JBoss Log Manager にルーティングしますが、ライブラリーの 1 つが別のロギング API に依存している場合があります。 このような場合、 ログアダプター を使用して、そのログメッセージが JBoss Log Manager にもルーティングされるようにする必要があります。 |
アプリケーションロガーの取得
To get an application logger in Quarkus, select one of the following approaches.
ロガー・フィールドの宣言
この古典的なアプローチでは、特定のAPIを使用してロガーインスタンスを取得し、それをクラスの静的フィールドに格納し、このインスタンスに対してロギング操作を呼び出します。
サポートされているどのロギングAPI でも同じフローを適用できます。
package com.example;
import org.jboss.logging.Logger;
public class MyService {
private static final Logger log = Logger.getLogger(MyService.class); (1)
public void doSomething() {
log.info("It works!"); (2)
}
}
1 | ロガーフィールドを定義します。 |
2 | log オブジェクトに対して、必要なロギングメソッドを呼び出します。 |
簡易ロギング
Quarkus は、 io.quarkus.logging.Log
を使用するクラスにロガーフィールドを自動的に追加することで、ロギングを簡素化します。
これにより、反復的な定型コードが不要になり、ロギング設定の利便性が向上します。
package com.example;
import io.quarkus.logging.Log; (1)
class MyService { (2)
public void doSomething() {
Log.info("Simple!"); (3)
}
}
1 | io.quarkus.logging.Log クラスには、 static であることを除き、JBoss Logging と同じメソッドがあります。 |
2 | このクラスはロガー・フィールドを宣言していないことに注意してください。
これは、アプリケーションのビルド中に、 Log API を使用する各クラスに private static final org.jboss.logging.Logger フィールドが自動的に作成されるためです。 Log メソッドを呼び出すクラスの完全修飾名が、ロガー名として使用されます。この例では、ロガー名は com.example.MyService です。 |
3 | 最後に、 Log メソッドへのすべての呼び出しは、アプリケーションビルド中に logger フィールドの通常の JBoss Logging 呼び出しに書き換えられます。 |
Log APIはアプリケーションクラスでのみ使用し、外部の依存関係では使用しないでください。ビルド時にQuarkusによって処理されていない Log メソッド呼び出しは、例外が発生します。
|
設定されたロガーの注入
@Inject
アノテーションで設定された org.jboss.logging.Logger
ロガーインスタンスの注入は、 アプリケーションロガーを追加するもう一つの選択肢ですが、 CDI Beanにのみ適用できます。
@Inject Logger log
を使用すると、ロガーは注入したクラスと同じ名前になり、 @Inject @LoggerName("…") Logger log
を使用すると、ロガーは指定された名前になります。注入されると、 log
オブジェクトを使用して、ロギングメソッドを呼び出すことができます。
package com.example;
import org.jboss.logging.Logger;
@ApplicationScoped
class SimpleBean {
@Inject
Logger log; (1)
@LoggerName("foo")
Logger fooLog; (2)
public void ping() {
log.info("Simple!");
fooLog.info("Goes to _foo_ logger!");
}
}
1 | The fully qualified class name (FQCN) of the declaring class is used as a logger name, for example, org.jboss.logging.Logger.getLogger(SimpleBean.class) will be used. |
2 | In this case, the name foo is used as a logger name, for example, org.jboss.logging.Logger.getLogger("foo") will be used. |
ロガーインスタンスは、内部的にキャッシュされます。したがって、ロガーが例えば @RequestScoped Bean に注入されるとき、ロガーのインスタンス化に関連する可能性のあるパフォーマンスペナルティを避けるために、ロガーはすべての Bean インスタンスで共有されます。
|
ログレベルの使用
Quarkus provides different log levels, which helps developers to control the amount of information logged based on the severity of the events.
OFF |
A special level used in configuration to turn off logging. |
FATAL |
A critical service failure or total inability to handle any requests. |
ERROR |
A major issue in processing or an inability to complete a request. |
WARN |
A non-critical service error or problem that might not require immediate correction. |
INFO |
Service lifecycle events or other important infrequent information. |
DEBUG |
Additional information about lifecycle events or events not tied to specific requests, useful for debugging. |
TRACE |
Detailed per-request debugging information, potentially at a very high frequency. |
ALL |
A special level to turn on logging for all messages, including custom levels. |
java.util.logging を使用するアプリケーションやライブラリに対して、以下のレベルを設定することもできます。 :
SEVERE |
ERROR と同じ |
WARNING |
WARN と同じ |
CONFIG |
サービス構成情報 |
FINE |
DEBUG と同じ |
FINER |
TRACE と同じ |
FINEST |
|
レベルの数値 | 標準レベル名 | 相当する java.util.logging (JUL) レベル名 |
---|---|---|
1100 |
FATAL |
該当なし |
1000 |
ERROR |
SEVERE |
900 |
WARN |
WARNING |
800 |
INFO |
INFO |
700 |
該当なし |
CONFIG |
500 |
DEBUG |
FINE |
400 |
TRACE |
FINER |
300 |
該当なし |
FINEST |
ログレベル、カテゴリー、フォーマットの設定
JBoss Logging, integrated into Quarkus, offers a unified configuration for all supported logging APIs through a single configuration file that sets up all available extensions.
To adjust runtime logging, modify the application.properties
file.
INFO
ログに設定し、Hibernate DEBUG
ログを含める方法の例です:quarkus.log.level=INFO
quarkus.log.category."org.hibernate".level=DEBUG
When you set the log level to below DEBUG
, you must also adjust the minimum log level.
This setting might be applied either globally with the quarkus.log.min-level
configuration property, or per category:
quarkus.log.category."org.hibernate".min-level=TRACE
これは、Quarkusがサポートコードを生成する必要があるフロアレベルを設定します。 Quarkusに対して使用不可能なレベルのログを省略できる最適化の機会を提供するため、最小ログレベルはビルド時に設定する必要があります。
INFO
を最小ロギング・レベルとして設定すると、 isTraceEnabled
のような低レベルのチェックが、 false
に設定されます。
これにより、 if(logger.isDebug()) callMethod();
のような実行されることのないコードが識別され、"dead "としてマークされます。
コマンドラインでこれらのプロパティを追加する場合は、 -Dquarkus.log.category.\"org.hibernate\".level=TRACE |
すべての可能性のあるプロパティは、 ロギング設定リファレンス セクションに列挙されています。
ロギングカテゴリ
ログはカテゴリごとに設定され、各カテゴリは独立して設定されます。 カテゴリの設定は、より具体的なサブカテゴリの設定がない限り、すべてのサブカテゴリに再帰的に適用されます。
すべてのロギングカテゴリの親は、"ルートカテゴリ "と呼ばれます。最終的な親として、このカテゴリは他のすべてのカテゴリにグローバルに適用される設定を含むことができます。 これには、グローバルに設定されたハンドラとフォーマッタが含まれます。
quarkus.log.handlers=con,mylog
quarkus.log.handler.console.con.enable=true
quarkus.log.handler.file.mylog.enable=true
In this example, the root category is configured to use two named handlers: con
and mylog
.
quarkus.log.category."org.apache.kafka.clients".level=INFO
quarkus.log.category."org.apache.kafka.common.utils".level=INFO
この例では、 org.apache.kafka.clients
および org.apache.kafka.common.utils
のカテゴリで最小ログレベルを設定する方法を示します。
詳しくは ロギング設定リファレンス をご覧ください。
特定のカテゴリーに対して何か特別な設定をしたい場合は、 quarkus.log.handler.[console|file|syslog].<your-handler-name>.*
のような名前付きハンドラーを作成し、 quarkus.log.category.<my-category>.handlers
を使ってそのカテゴリー用に設定します。
ユースケース例としては、ファイルに保存されるログメッセージに、他のハンドラで使用されるフォーマットとは異なるタイムスタンプ形式を使いたい場合があります。
さらに詳しい例として、 名前付きハンドラをカテゴリにアタッチ する例の出力を参照してください。
プロパティ名 | デフォルト | 説明 |
---|---|---|
|
|
|
|
|
|
|
|
このロガーがその出力を親ロガーに送信するかどうかを指定します。 |
|
|
特定のカテゴリにアタッチしたいハンドラーの名前です。 |
|
ルートロガーの設定
ルート・ロガー・カテゴリーは別個に扱われ、以下のプロパティを使用して設定されます:
プロパティ名 | デフォルト | 説明 |
---|---|---|
|
|
各ログカテゴリのデフォルトのログレベル。 |
|
|
各ログカテゴリのデフォルトの最小ログレベル。 |
-
指定されたロガー カテゴリにレベル設定が存在しない場合、親カテゴリが調べられます。
-
カテゴリおよびその親カテゴリのいずれにも特定の設定が提供されていない場合、 ルート・ロガー設定が使用されます。
ルートロガーのハンドラは、通常、 |
ロギングフォーマット
Quarkus uses a pattern-based logging formatter that generates human-readable text logs by default, but you can also configure the format for each log handler by using a dedicated property.
コンソールハンドラの場合、プロパティは quarkus.log.console.format
です。
ログフォーマット文字列は、以下のシンボルをサポートしています:
Symbol | 概要 | 説明 |
---|---|---|
|
|
単に |
|
カテゴリ |
カテゴリ名をレンダリングします。 |
|
ソースクラス |
Renders the source class name.[3] |
|
日付 |
|
|
Exception |
投げられた例外があれば、その例外をレンダリングします。 |
|
ソースファイル |
ソースファイル名をレンダリングします。 [3] |
|
ホスト名 |
システムの単純なホスト名をレンダリングします。 |
|
修飾ホスト名 |
Renders the system’s fully qualified host name, which might be the same as the simple host name, depending on operating system configuration. |
|
プロセスID |
現在のプロセスPIDをレンダリングします。 |
|
ソースの場所 |
ソースファイル名、行番号、クラス名、メソッド名を含むソース・ロケーション情報をレンダリングします。 [3] |
|
ソースライン |
ソース行番号をレンダリングします。 [3] |
|
フルメッセージ |
ログメッセージと例外(もしあれば)を表示します。 |
|
ソース・メソッド |
ソースメソッド名をレンダリングします。 [3] |
|
改行 |
プラットフォーム固有の改行文字列をレンダリングします。 |
|
プロセス名 |
現在のプロセスの名前をレンダリングします。 |
|
レベル |
メッセージのログレベルをレンダリングします。 |
|
相対時間 |
アプリケーションログの開始からの時間をミリ秒単位でレンダリングします。 |
|
シンプルなメッセージ |
ログメッセージのみを表示し、例外のトレースは表示しません。 |
|
スレッド名 |
スレッド名をレンダリングします。 |
|
スレッドID |
スレッドIDをレンダリングします。 |
|
タイムゾーン |
出力のタイムゾーンを |
|
Mapped Diagnostic Context(MDC)値 |
Mapped Diagnostic Context(MDC)の値をレンダリングします。 |
|
Mapped Diagnostic Context(MDC)値 |
Mapped Diagnostic Context(MDC)の値を |
|
入れ子のMapped Diagnostic Context(MDC)値 |
入れ子のMapped Diagnostic Context(MDC)のすべての値を |
コンソール・ロギングの代替フォーマット
コンソールログの形式の変更は便利です。例えば、Quarkusアプリケーションのコンソール出力が、後で分析するためにログ情報を処理して保存するサービスによってキャプチャされる場合などです。
JSONロギングフォーマット
The quarkus-logging-json
extension might be employed to add support for the JSON logging format and its related configuration.
-
以下のスニペットのように、このエクステンションをビルドファイルに追加してください:
pom.xml<dependency> <groupId>io.quarkus</groupId> <artifactId>quarkus-logging-json</artifactId> </dependency>
build.gradleimplementation("io.quarkus:quarkus-logging-json")
By default, the presence of this extension replaces the output format configuration from the console configuration, and the format string and the color settings (if any) are ignored. The other console configuration items, including those that control asynchronous logging and the log level, will continue to be applied.
開発モードでは人間が読める(構造化されていない)ロギングを使い、運用モードでは JSON ロギング(構造化されている)を使うことが理にかなっている場合もあるでしょう。 これは、次の設定に示すように、異なるプロファイルを使うことで実現できます。
-
開発モードとテストモードのapplication.propertiesでJSONロギングを無効にします:
%dev.quarkus.log.console.json=false %test.quarkus.log.console.json=false
設定
サポートされているプロパティを使用してJSONロギングエクステンションを設定し、その動作をカスタマイズしてください。
ビルド時に固定される構成プロパティ - 他のすべての構成プロパティは実行時にオーバーライド可能
Configuration property |
型 |
デフォルト |
---|---|---|
型 |
デフォルト |
|
Determine whether to enable the JSON console formatting extension, which disables "normal" console formatting. Environment variable: Show more |
boolean |
|
Enable "pretty printing" of the JSON record. Note that some JSON parsers will fail to read the pretty printed output. Environment variable: Show more |
boolean |
|
The date format to use. The special string "default" indicates that the default format should be used. Environment variable: Show more |
string |
|
The special end-of-record delimiter to be used. By default, newline is used. Environment variable: Show more |
string |
|
The zone ID to use. The special string "default" indicates that the default zone should be used. Environment variable: Show more |
string |
|
The exception output type to specify. Environment variable: Show more |
|
|
Enable printing of more details in the log. Printing the details can be expensive as the values are retrieved from the caller. The details include the source class name, source file name, source method name, and source line number. Environment variable: Show more |
boolean |
|
Override keys with custom values. Omitting this value indicates that no key overrides will be applied. Environment variable: Show more |
string |
|
Keys to be excluded from the JSON output. Environment variable: Show more |
list of string |
|
Additional field value. Environment variable: Show more |
string |
required |
Additional field type specification. Supported types: Environment variable: Show more |
|
|
型 |
デフォルト |
|
Determine whether to enable the JSON console formatting extension, which disables "normal" console formatting. Environment variable: Show more |
boolean |
|
Enable "pretty printing" of the JSON record. Note that some JSON parsers will fail to read the pretty printed output. Environment variable: Show more |
boolean |
|
The date format to use. The special string "default" indicates that the default format should be used. Environment variable: Show more |
string |
|
The special end-of-record delimiter to be used. By default, newline is used. Environment variable: Show more |
string |
|
The zone ID to use. The special string "default" indicates that the default zone should be used. Environment variable: Show more |
string |
|
The exception output type to specify. Environment variable: Show more |
|
|
Enable printing of more details in the log. Printing the details can be expensive as the values are retrieved from the caller. The details include the source class name, source file name, source method name, and source line number. Environment variable: Show more |
boolean |
|
Override keys with custom values. Omitting this value indicates that no key overrides will be applied. Environment variable: Show more |
string |
|
Keys to be excluded from the JSON output. Environment variable: Show more |
list of string |
|
Additional field value. Environment variable: Show more |
string |
required |
Additional field type specification. Supported types: Environment variable: Show more |
|
|
型 |
デフォルト |
|
Determine whether to enable the JSON console formatting extension, which disables "normal" console formatting. Environment variable: Show more |
boolean |
|
Enable "pretty printing" of the JSON record. Note that some JSON parsers will fail to read the pretty printed output. Environment variable: Show more |
boolean |
|
The date format to use. The special string "default" indicates that the default format should be used. Environment variable: Show more |
string |
|
The special end-of-record delimiter to be used. By default, newline is used. Environment variable: Show more |
string |
|
The zone ID to use. The special string "default" indicates that the default zone should be used. Environment variable: Show more |
string |
|
The exception output type to specify. Environment variable: Show more |
|
|
Enable printing of more details in the log. Printing the details can be expensive as the values are retrieved from the caller. The details include the source class name, source file name, source method name, and source line number. Environment variable: Show more |
boolean |
|
Override keys with custom values. Omitting this value indicates that no key overrides will be applied. Environment variable: Show more |
string |
|
Keys to be excluded from the JSON output. Environment variable: Show more |
list of string |
|
Additional field value. Environment variable: Show more |
string |
required |
Additional field type specification. Supported types: Environment variable: Show more |
|
|
プリティプリント (pretty printing) を有効にすると、特定のプロセッサーやJSONパーサーで解釈できなくなる可能性があります。 |
詳細の表示は、呼び出し元から値を取得するため、コストがかかる場合があります。詳細には、ソースクラス名、ソースファイル名、ソースメソッド名、ソース行番号などが含まれます。 |
ログハンドラー
A log handler is a logging component responsible for the emission of log events to a recipient. Quarkus includes several different log handlers: console, file, and syslog.
以下の例では、 com.example
をロギング・カテゴリーとして使用しています。
コンソールログハンドラー
コンソールログハンドラーはデフォルトで有効になっており、すべてのログイベントをアプリケーションのコンソール(通常はシステムの stdout
)に送ります。
-
グローバル設定の例:
quarkus.log.console.format=%d{yyyy-MM-dd HH:mm:ss} %-5p [%c] (%t) %s%e%n
-
カテゴリーごとの設定の例:
quarkus.log.handler.console.my-console-handler.format=%d{yyyy-MM-dd HH:mm:ss} [com.example] %s%e%n quarkus.log.category."com.example".handlers=my-console-handler quarkus.log.category."com.example".use-parent-handlers=false
For details about its configuration, see the console logging configuration reference.
ファイルログハンドラー
アプリケーションのホスト上のファイルにイベントをログ記録するには、Quarkusのファイルログハンドラーを使用します。 ファイルログハンドラーはデフォルトで無効になっているため、最初に有効にする必要があります。
Quarkusのファイルログハンドラーは、ログファイルのローテーションをサポートしています。
Log file rotation ensures efficient log management by preserving a specified number of backup files while keeping the primary log file updated and at a manageable size.
-
グローバル設定の例:
quarkus.log.file.enable=true quarkus.log.file.path=application.log quarkus.log.file.format=%d{yyyy-MM-dd HH:mm:ss} %-5p [%c] (%t) %s%e%n
-
カテゴリーごとの設定の例:
quarkus.log.handler.file.my-file-handler.enable=true quarkus.log.handler.file.my-file-handler.path=application.log quarkus.log.handler.file.my-file-handler.format=%d{yyyy-MM-dd HH:mm:ss} [com.example] %s%e%n quarkus.log.category."com.example".handlers=my-file-handler quarkus.log.category."com.example".use-parent-handlers=false
For details about its configuration, see the file logging configuration reference.
Syslog ログハンドラー
The syslog handler in Quarkus follows the Syslog protocol, which is used to send log messages on UNIX-like systems. It uses the protocol defined in RFC 5424.
デフォルトでは、syslogハンドラーは無効になっています。 有効にすると、すべてのログイベントを syslog サーバー(通常はアプリケーションのローカル syslog サーバー)に送信します。
-
グローバル設定の例:
quarkus.log.syslog.enable=true quarkus.log.syslog.app-name=my-application quarkus.log.syslog.format=%d{yyyy-MM-dd HH:mm:ss} %-5p [%c] (%t) %s%e%n
-
カテゴリーごとの設定の例:
quarkus.log.handler.syslog.my-syslog-handler.enable=true quarkus.log.handler.syslog.my-syslog-handler.app-name=my-application quarkus.log.handler.syslog.my-syslog-handler.format=%d{yyyy-MM-dd HH:mm:ss} [com.example] %s%e%n quarkus.log.category."com.example".handlers=my-syslog-handler quarkus.log.category."com.example".use-parent-handlers=false
For details about its configuration, see the Syslog logging configuration reference.
ログハンドラーに対するロギングフィルタの追加
コンソールログハンドラーのようなログハンドラーは、ログレコードがログに記録されるべきかどうかを決定する フィルタ とリンクすることができます。
ロギングフィルターの登録方法
-
java.util.logging.Filter
を実装するfinal
クラスを@io.quarkus.logging.LoggingFilter
でアノテートし、name
プロパティを設定します:フィルターの書き方の例:package com.example; import io.quarkus.logging.LoggingFilter; import java.util.logging.Filter; import java.util.logging.LogRecord; @LoggingFilter(name = "my-filter") public final class TestFilter implements Filter { private final String part; public TestFilter(@ConfigProperty(name = "my-filter.part") String part) { this.part = part; } @Override public boolean isLoggable(LogRecord record) { return !record.getMessage().contains(part); } }
この例では、コンソールログから特定のテキストを含むログレコードを除外します。 フィルタリングする特定のテキストはハードコードされておらず、
my-filter.part
設定プロパティから読み込まれます。application.properties
におけるフィルターの設定例:my-filter.part=TEST
-
application.properties
にあるfilter
設定プロパティを使用して、対応するハンドラーにフィルターをアタッチします:quarkus.log.console.filter=my-filter
ロギング設定の例
The following examples show some of the ways in which you can configure logging in Quarkus:
quarkus.log.console.format=%d{HH:mm:ss} %-5p [%c{2.}] (%t) %s%e%n
quarkus.log.console.level=DEBUG
quarkus.console.color=false
quarkus.log.category."io.quarkus".level=INFO
コマンドラインでこれらのプロパティを追加する場合、忘れずに " をエスケープして下さい。
例えば、 -Dquarkus.log.category.\"io.quarkus\".level=DEBUG .
|
quarkus.log.file.enable=true
# Send output to a trace.log file under the /tmp directory
quarkus.log.file.path=/tmp/trace.log
quarkus.log.file.level=TRACE
quarkus.log.file.format=%d{HH:mm:ss} %-5p [%c{2.}] (%t) %s%e%n
# Set 2 categories (io.quarkus.smallrye.jwt, io.undertow.request.security) to TRACE level
quarkus.log.min-level=TRACE
quarkus.log.category."io.quarkus.smallrye.jwt".level=TRACE
quarkus.log.category."io.undertow.request.security".level=TRACE
As we do not change the root logger, the console log contains only INFO or higher level logs.
|
# Send output to a trace.log file under the /tmp directory
quarkus.log.file.path=/tmp/trace.log
quarkus.log.console.format=%d{HH:mm:ss} %-5p [%c{2.}] (%t) %s%e%n
# Configure a named handler that logs to console
quarkus.log.handler.console."STRUCTURED_LOGGING".format=%e%n
# Configure a named handler that logs to file
quarkus.log.handler.file."STRUCTURED_LOGGING_FILE".enable=true
quarkus.log.handler.file."STRUCTURED_LOGGING_FILE".format=%e%n
# Configure the category and link the two named handlers to it
quarkus.log.category."io.quarkus.category".level=INFO
quarkus.log.category."io.quarkus.category".handlers=STRUCTURED_LOGGING,STRUCTURED_LOGGING_FILE
# configure a named file handler that sends the output to 'quarkus.log'
quarkus.log.handler.file.CONSOLE_MIRROR.enable=true
quarkus.log.handler.file.CONSOLE_MIRROR.path=quarkus.log
# attach the handler to the root logger
quarkus.log.handlers=CONSOLE_MIRROR
ログの一元管理
アプリケーションのさまざまなコンポーネントやインスタンスからログデータを効率的に収集、保存、分析するために、一元化された場所を使用します。
Graylog、Logstash、Fluentdなどの集中型ツールにログを送信するには、Quarkusの 集中型ログ管理 ガイドを参照してください。
OpenTelemetry logging
Logging entries from all appenders can be sent using OpenTelemetry Logging.
For details, see the Quarkus OpenTelemetry Logging guide.
@QuarkusTest
のロギング設定
java.util.logging.manager
システム・プロパティを org.jboss.logmanager.LogManager
に設定して、 @QuarkusTest
の適切なロギングを有効にします。
このシステム・プロパティは早い段階で設定しておかないと効果がないので、ビルド・システムで設定することをお勧めします。
java.util.logging.manager
システムプロパティの設定<build>
<plugins>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>${surefire-plugin.version}</version>
<configuration>
<systemPropertyVariables>
<java.util.logging.manager>org.jboss.logmanager.LogManager</java.util.logging.manager> (1)
<quarkus.log.level>DEBUG</quarkus.log.level> (2)
<maven.home>${maven.home}</maven.home>
</systemPropertyVariables>
</configuration>
</plugin>
</plugins>
</build>
1 | org.jboss.logmanager.LogManager が使用されていることを確認してください。 |
2 | すべてのロギングカテゴリのデバッグロギングを有効にします。 |
Gradleの場合は、 build.gradle
ファイルに以下の設定を追加します:
test {
systemProperty "java.util.logging.manager", "org.jboss.logmanager.LogManager"
}
IDEからの @QuarkusTest
の実行 も参照して下さい。
他のロギングAPIの使用
Quarkus relies on the JBoss Logging library for all the logging requirements.
Apache Commons Logging、Log4j、SLF4J など、他のロギングライブラリに依存するライブラリを使用すると仮定します。 その場合、依存関係からそれらを除外し、JBoss Logging アダプターのいずれかを使用します。
これはネイティブ実行ファイルをビルドする際に特に重要です。 ネイティブ実行ファイルをコンパイルする際に、以下のような問題が発生する可能性があるからです:
Caused by java.lang.ClassNotFoundException: org.apache.commons.logging.impl.LogFactoryImpl
ロギングの実装はネイティブ実行ファイルには含まれていませんが、JBoss Logging アダプターを使用してこの問題を解決できます。
これらのアダプターは、次の章で説明するように、人気のあるオープンソースのロギングコンポーネントで利用可能です。
アプリケーションにロギングアダプタを追加
jboss-logging
以外の各ロギングAPIについて:
-
ロギングアダプターライブラリーを追加して、これらの API を通じてログ記録されたメッセージが JBoss Log Manager バックエンドにルーティングされるようにします。
Quarkusエクステンションの依存ライブラリで、エクステンションが自動的に処理する場合は、この手順は不要です。 -
Apache Commons Logging:
pom.xml<dependency> <groupId>org.jboss.logging</groupId> <artifactId>commons-logging-jboss-logging</artifactId> </dependency>
build.gradleimplementation("org.jboss.logging:commons-logging-jboss-logging")
-
Log4j:
pom.xml<dependency> <groupId>org.jboss.logmanager</groupId> <artifactId>log4j-jboss-logmanager</artifactId> </dependency>
build.gradleimplementation("org.jboss.logmanager:log4j-jboss-logmanager")
-
Log4j 2:
pom.xml<dependency> <groupId>org.jboss.logmanager</groupId> <artifactId>log4j2-jboss-logmanager</artifactId> </dependency>
build.gradleimplementation("org.jboss.logmanager:log4j2-jboss-logmanager")
Do not include any Log4j dependencies, as the
log4j2-jboss-logmanager
library contains everything needed to use Log4j as a logging implementation. -
SLF4J:
pom.xml<dependency> <groupId>org.jboss.slf4j</groupId> <artifactId>slf4j-jboss-logmanager</artifactId> </dependency>
build.gradleimplementation("org.jboss.slf4j:slf4j-jboss-logmanager")
-
-
追加したライブラリによって生成されたログが、他のQuarkusログと同じ形式であるかどうかを確認してください。
MDCを使用してコンテキストログ情報を追加
Quarkus overrides the logging Mapped Diagnostic Context (MDC) to improve compatibility with its reactive core.
MDCデータの追加と読込
MDCにデータを追加し、ログ出力に抽出するには以下のように行います:
-
MDC
クラスを使ってデータをセットします。-
Add
import org.jboss.logmanager.MDC;
-
Set
MDC.put(…)
as shown in the example below:An example with JBoss Logging andio.quarkus.logging.Log
package me.sample; import io.quarkus.logging.Log; import jakarta.ws.rs.GET; import jakarta.ws.rs.Path; import org.jboss.logmanager.MDC; import java.util.UUID; @Path("/hello/jboss") public class GreetingResourceJbossLogging { @GET @Path("/test") public String greeting() { MDC.put("request.id", UUID.randomUUID().toString()); MDC.put("request.path", "/hello/test"); Log.info("request received"); return "hello world!"; } }
-
-
Configure the log format to use
%X{mdc-key}
:quarkus.log.console.format=%d{HH:mm:ss} %-5p request.id=%X{request.id} request.path=%X{request.path} [%c{2.}] (%t) %s%n
The resulting message contains the MDC data:
08:48:13 INFO request.id=c37a3a36-b7f6-4492-83a1-de41dbc26fe2 request.path=/hello/test [me.sa.GreetingResourceJbossLogging] (executor-thread-1) request received
MDCとサポートされるロギングAPI
Based on your logging API, use one of the following MDC classes:
-
Log4j 1 -
org.apache.log4j.MDC.put(key, value)
-
Log4j 2 -
org.apache.logging.log4j.ThreadContext.put(key, value)
-
SLF4J -
org.slf4j.MDC.put(key, value)
MDCの伝播
Quarkusでは、MDCプロバイダにはリアクティブコンテキストを処理するための特別な実装があり、リアクティブ処理や非同期処理中にMDCデータが確実に伝搬されます。
その結果、さまざまなシナリオでMDCデータにアクセスすることができます:
-
非同期呼び出しの後、例えばRESTクライアントがUniを返す場合:
-
org.eclipse.microprofile.context.ManagedExecutor
に送信されたコード: -
vertx.executeBlocking()
で実行されるコード:
If applicable, MDC data is stored in a duplicated context, which is an isolated context for processing a single task or request. |
ロギング設定リファレンス
ビルド時に固定される構成プロパティ - 他のすべての構成プロパティは、実行時にオーバーライド可能
Configuration property |
タイプ |
デフォルト |
---|---|---|
If enabled and a metrics extension is present, logging metrics are published. Environment variable: Show more |
ブーリアン |
|
The default minimum log level. Environment variable: Show more |
|
|
This will decorate the stacktrace in dev mode to show the line in the code that cause the exception Environment variable: Show more |
ブーリアン |
|
The log level of the root category, which is used as the default log level for all categories. JBoss Logging supports Apache-style log levels:
In addition, it also supports the standard JDK log levels. Environment variable: Show more |
|
|
The names of additional handlers to link to the root category. These handlers are defined in consoleHandlers, fileHandlers, or syslogHandlers. Environment variable: Show more |
list of string |
|
タイプ |
デフォルト |
|
The minimum log level for this category. By default, all categories are configured with To get runtime logging below As an example, to get Environment variable: Show more |
InheritableLevel |
|
The log level for this category. Note that to get log levels below Environment variable: Show more |
InheritableLevel |
|
The names of the handlers to link to this category. Environment variable: Show more |
list of string |
|
Specify whether this logger should send its output to its parent Logger Environment variable: Show more |
ブーリアン |
|
タイプ |
デフォルト |
|
If console logging should be enabled Environment variable: Show more |
ブーリアン |
|
If console logging should go to Environment variable: Show more |
ブーリアン |
|
The log format. Note that this value is ignored if an extension is present that takes control of console formatting (e.g., an XML or JSON-format extension). Environment variable: Show more |
string |
|
The console log level. Environment variable: Show more |
|
|
Specify how much the colors should be darkened. Note that this value is ignored if an extension is present that takes control of console formatting (e.g., an XML or JSON-format extension). Environment variable: Show more |
int |
|
The name of the filter to link to the console handler. Environment variable: Show more |
string |
|
Indicates whether to log asynchronously Environment variable: Show more |
ブーリアン |
|
The queue length to use before flushing writing Environment variable: Show more |
int |
|
Determine whether to block the publisher (rather than drop the message) when the queue is full Environment variable: Show more |
|
|
タイプ |
デフォルト |
|
If file logging should be enabled Environment variable: Show more |
ブーリアン |
|
string |
|
|
The level of logs to be written into the file. Environment variable: Show more |
|
|
The name of the file in which logs will be written. Environment variable: Show more |
|
|
The name of the filter to link to the file handler. Environment variable: Show more |
string |
|
The character encoding used Environment variable: Show more |
||
Indicates whether to log asynchronously Environment variable: Show more |
ブーリアン |
|
The queue length to use before flushing writing Environment variable: Show more |
int |
|
Determine whether to block the publisher (rather than drop the message) when the queue is full Environment variable: Show more |
|
|
The maximum log file size, after which a rotation is executed. Environment variable: Show more |
|
|
The maximum number of backups to keep. Environment variable: Show more |
int |
|
The file handler rotation file suffix. When used, the file will be rotated based on its suffix. The suffix must be in a date-time format that is understood by Example fileSuffix: .yyyy-MM-dd Note: If the suffix ends with .zip or .gz, the rotation file will also be compressed. Environment variable: Show more |
string |
|
Indicates whether to rotate log files on server initialization. You need to either set a Environment variable: Show more |
ブーリアン |
|
タイプ |
デフォルト |
|
If syslog logging should be enabled Environment variable: Show more |
ブーリアン |
|
The IP address and port of the Syslog server Environment variable: Show more |
host:port |
|
The app name used when formatting the message in RFC5424 format Environment variable: Show more |
string |
|
The name of the host the messages are being sent from Environment variable: Show more |
string |
|
Sets the facility used when calculating the priority of the message as defined by RFC-5424 and RFC-3164 Environment variable: Show more |
|
|
Set the Environment variable: Show more |
|
|
Sets the protocol used to connect to the Syslog server Environment variable: Show more |
|
|
If enabled, the message being sent is prefixed with the size of the message Environment variable: Show more |
ブーリアン |
|
Set to Environment variable: Show more |
ブーリアン |
|
Enables or disables blocking when attempting to reconnect a Environment variable: Show more |
ブーリアン |
|
The log message format Environment variable: Show more |
string |
|
The log level specifying what message levels will be logged by the Syslog logger Environment variable: Show more |
|
|
The name of the filter to link to the file handler. Environment variable: Show more |
string |
|
The maximum length, in bytes, of the message allowed to be sent. The length includes the header and the message. If not set, the default value is Environment variable: Show more |
||
Indicates whether to log asynchronously Environment variable: Show more |
ブーリアン |
|
The queue length to use before flushing writing Environment variable: Show more |
int |
|
Determine whether to block the publisher (rather than drop the message) when the queue is full Environment variable: Show more |
|
|
タイプ |
デフォルト |
|
If console logging should be enabled Environment variable: Show more |
ブーリアン |
|
If console logging should go to Environment variable: Show more |
ブーリアン |
|
The log format. Note that this value is ignored if an extension is present that takes control of console formatting (e.g., an XML or JSON-format extension). Environment variable: Show more |
string |
|
The console log level. Environment variable: Show more |
|
|
Specify how much the colors should be darkened. Note that this value is ignored if an extension is present that takes control of console formatting (e.g., an XML or JSON-format extension). Environment variable: Show more |
int |
|
The name of the filter to link to the console handler. Environment variable: Show more |
string |
|
Indicates whether to log asynchronously Environment variable: Show more |
ブーリアン |
|
The queue length to use before flushing writing Environment variable: Show more |
int |
|
Determine whether to block the publisher (rather than drop the message) when the queue is full Environment variable: Show more |
|
|
タイプ |
デフォルト |
|
If file logging should be enabled Environment variable: Show more |
ブーリアン |
|
The log format Environment variable: Show more |
string |
|
The level of logs to be written into the file. Environment variable: Show more |
|
|
The name of the file in which logs will be written. Environment variable: Show more |
|
|
The name of the filter to link to the file handler. Environment variable: Show more |
string |
|
The character encoding used Environment variable: Show more |
||
Indicates whether to log asynchronously Environment variable: Show more |
ブーリアン |
|
The queue length to use before flushing writing Environment variable: Show more |
int |
|
Determine whether to block the publisher (rather than drop the message) when the queue is full Environment variable: Show more |
|
|
The maximum log file size, after which a rotation is executed. Environment variable: Show more |
|
|
The maximum number of backups to keep. Environment variable: Show more |
int |
|
The file handler rotation file suffix. When used, the file will be rotated based on its suffix. The suffix must be in a date-time format that is understood by Example fileSuffix: .yyyy-MM-dd Note: If the suffix ends with .zip or .gz, the rotation file will also be compressed. Environment variable: Show more |
string |
|
Indicates whether to rotate log files on server initialization. You need to either set a Environment variable: Show more |
ブーリアン |
|
タイプ |
デフォルト |
|
If syslog logging should be enabled Environment variable: Show more |
ブーリアン |
|
The IP address and port of the Syslog server Environment variable: Show more |
host:port |
|
The app name used when formatting the message in RFC5424 format Environment variable: Show more |
string |
|
The name of the host the messages are being sent from Environment variable: Show more |
string |
|
Sets the facility used when calculating the priority of the message as defined by RFC-5424 and RFC-3164 Environment variable: Show more |
|
|
Set the Environment variable: Show more |
|
|
Sets the protocol used to connect to the Syslog server Environment variable: Show more |
|
|
If enabled, the message being sent is prefixed with the size of the message Environment variable: Show more |
ブーリアン |
|
Set to Environment variable: Show more |
ブーリアン |
|
Enables or disables blocking when attempting to reconnect a Environment variable: Show more |
ブーリアン |
|
The log message format Environment variable: Show more |
string |
|
The log level specifying what message levels will be logged by the Syslog logger Environment variable: Show more |
|
|
The name of the filter to link to the file handler. Environment variable: Show more |
string |
|
The maximum length, in bytes, of the message allowed to be sent. The length includes the header and the message. If not set, the default value is Environment variable: Show more |
||
Indicates whether to log asynchronously Environment variable: Show more |
ブーリアン |
|
The queue length to use before flushing writing Environment variable: Show more |
int |
|
Determine whether to block the publisher (rather than drop the message) when the queue is full Environment variable: Show more |
|
|
タイプ |
デフォルト |
|
The message prefix to match Environment variable: Show more |
list of string |
|
The new log level for the filtered message. Defaults to DEBUG. Environment variable: Show more |
|
About the MemorySize format
A size configuration option recognizes strings in this format (shown as a regular expression): If no suffix is given, assume bytes. |