bin/kc.[sh|bat] start --log-level=<root-level>
Keycloak は JBoss Logging フレームワークを使用しています。以下は、共通の親ログハンドラーである root
を持つ、利用可能なログハンドラーの概要です。
console
file
syslog
Keycloak では、ロギングはカテゴリごとに行われます。ルートログレベル、または org.hibernate
や org.keycloak
などのより具体的なカテゴリのロギングを設定できます。また、特定のログハンドラーごとにログレベルを調整することも可能です。
このガイドでは、ロギングの設定方法について説明します。
以下の表は、利用可能なログレベルを定義しています。
レベル | 説明 |
---|---|
FATAL |
あらゆる種類のリクエストに応答できない、重大な障害。 |
ERROR |
リクエストを処理できない原因となる重大なエラーまたは問題。 |
WARN |
直ちに修正する必要はないかもしれない、重要でないエラーまたは問題。 |
INFO |
Keycloak のライフサイクルイベントまたは重要な情報。低頻度。 |
DEBUG |
データベースログなど、デバッグ目的の詳細情報。高頻度。 |
TRACE |
最も詳細なデバッグ情報。非常に高頻度。 |
ALL |
すべてのログメッセージに対する特別なレベル。 |
OFF |
ロギングを完全にオフにする特別なレベル (推奨されません)。 |
より具体的なカテゴリロガーのログレベル設定が存在しない場合、代わりに囲みカテゴリが使用されます。囲みカテゴリがない場合、ルートロガーレベルが使用されます。
ルートログレベルを設定するには、次のコマンドを入力します
bin/kc.[sh|bat] start --log-level=<root-level>
このコマンドには、以下のガイドラインを使用してください
<root-level>
には、上記の表で定義されたレベルを指定します。
ログレベルは大文字と小文字を区別しません。たとえば、DEBUG
または debug
のいずれかを使用できます。
誤ってログレベルを 2 回設定した場合、リストの最後の出現箇所がログレベルになります。たとえば、構文 --log-level="info,…,DEBUG,…"
を含めた場合、ルートロガーは DEBUG
になります。
Keycloak の特定の領域に対して異なるログレベルを設定できます。異なるログレベルを設定したいカテゴリのカンマ区切りリストを指定するには、次のコマンドを使用します
bin/kc.[sh|bat] start --log-level="<root-level>,<org.category1>:<org.category1-level>"
カテゴリに適用される設定は、より具体的な一致するサブカテゴリを含めない限り、そのサブカテゴリにも適用されます。
bin/kc.[sh|bat] start --log-level="INFO,org.hibernate:debug,org.hibernate.hql.internal.ast:info"
この例では、次のログレベルを設定します
すべてのロガーのルートログレベルは INFO に設定されています。
Hibernate ログレベルは一般的に debug に設定されています。
SQL 抽象構文木が冗長なログ出力を生成するのを防ぐために、特定のサブカテゴリ org.hibernate.hql.internal.ast
は info に設定されています。その結果、SQL 抽象構文木は debug
レベルで表示される代わりに省略されます。
カテゴリ固有のログレベルを設定する場合、log-level
オプションの代わりに、個別の log-level-<category>
オプションとしてログレベルを設定することもできます。これは、以前に設定した log-level
オプションを上書きせずに、選択したカテゴリのログレベルを設定したい場合に便利です。
サーバーを次のように起動する場合
bin/kc.[sh|bat] start --log-level="INFO,org.hibernate:debug"
KC_LOG_LEVEL_ORG_KEYCLOAK=trace
環境変数を設定して、org.keycloak
カテゴリのログレベルを変更できます。
log-level-<category>
オプションは、log-level
よりも優先されます。これにより、log-level
オプションで設定した内容をオーバーライドできます。たとえば、上記の CLI 例で KC_LOG_LEVEL_ORG_HIBERNATE=trace
を設定した場合、org.hibernate
カテゴリは debug
レベルではなく trace
レベルを使用します。
環境変数を使用する場合、カテゴリ名はすべて大文字で、ドットはアンダースコアに置き換える必要があることに注意してください。他の構成ソースを使用する場合、カテゴリ名は「そのまま」指定する必要があります。例:
bin/kc.[sh|bat] start --log-level="INFO,org.hibernate:debug" --log-level-org.keycloak=trace
ログハンドラーを有効にするには、次のコマンドを入力します
bin/kc.[sh|bat] start --log="<handler1>,<handler2>"
利用可能なハンドラーは次のとおりです
console
file
syslog
以下に説明するより具体的なハンドラー設定は、ハンドラーがこのカンマ区切りリストに追加された場合にのみ有効になります。
log-level
プロパティは、グローバルルートログレベルと選択したカテゴリのレベルを指定します。ただし、最新のアプリケーション要件に準拠するためには、よりきめ細かいログレベルのアプローチが必要です。
特定のハンドラーのログレベルを設定するには、log-<handler>-level
(<handler>
は利用可能なログハンドラー) 形式のプロパティが導入されました。
つまり、ログレベル設定のプロパティは次のようになります
log-console-level
- コンソールログハンドラー
log-file-level
- ファイルログハンドラー
log-syslog-level
- Syslog ログハンドラー
log-<handler>-level プロパティは、特定のログハンドラーが有効になっている場合にのみ使用できます。詳細については、以下のログハンドラー設定を参照してください。 |
ログレベル セクションで指定されたログレベルのみが受け入れられ、小文字でなければなりません。現時点では、ログハンドラーに特定のカテゴリを指定することはサポートされていません。
各特定のハンドラーのログレベルを設定しても、log-level
プロパティで指定されたルートレベルはオーバーライドされないことを理解する必要があります。ログハンドラーはルートログレベルを尊重し、これはロギングシステム全体の最大詳細度を表します。つまり、個々のログハンドラーはルートロガーよりも詳細度を低く設定できますが、高くすることはできません。
具体的には、任意のログレベルがハンドラーに対して定義されている場合でも、そのログレベルのログレコードが出力に表示されるとは限りません。その場合、ルートの log-level
も評価する必要があります。ログハンドラーレベルはルートログレベルの制限を提供し、ログハンドラーのデフォルトログレベルは all
(制限なし) です。
debug
、コンソールハンドラーには info
bin/kc.[sh|bat] start --log=console,file --log-level=debug --log-console-level=info
ルートログレベルは debug
に設定されているため、すべてのログハンドラーが値を継承します。ファイルログハンドラーも同様です。コンソールで debug
レコードを非表示にするには、コンソールハンドラーの最小 (最も重要度の低い) レベルを info
に設定する必要があります。
warn
、ファイルハンドラーに debug
bin/kc.[sh|bat] start --log=console,file,syslog --log-level=debug --log-console-level=warn --log-syslog-level=warn
ルートレベルは、最も詳細な必要なレベル (この場合は debug
) に設定する必要があり、他のログハンドラーはそれに応じて修正する必要があります。
info
、Syslog ハンドラーに debug
+org.keycloak.events:trace
bin/kc.[sh|bat] start --log=console,file,syslog --log-level=debug,org.keycloak.events:trace, --log-syslog-level=trace --log-console-level=info --log-file-level=info
org.keycloak.events:trace
を表示するには、Syslog ハンドラーに trace
レベルを設定する必要があります。
すべてのログハンドラーは、JSON 形式で構造化されたログ出力を出力する機能を提供します。これは、log-<handler>-output=json
(<handler>
はログハンドラー) 形式のプロパティで有効にできます。
生成される JSON の形式を変更する必要がある場合は、次の JSON 出力形式を利用できます
default
(デフォルト)
ecs
ecs
値は、ECS (Elastic Common Schema) を指します。
ECS は、Elastic ソリューションで使用される共通のフィールドセットを定義する、オープンソースのコミュニティ主導の仕様です。ECS 仕様は、OpenTelemetry Semantic Conventions と統合され、OpenTelemetry によって維持される単一の標準を作成することを目標としています。
JSON 出力形式を変更するために、log-<handler>-json-format
(<handler>
はログハンドラー) 形式のプロパティが導入されました
log-console-json-format
- コンソールログハンドラー
log-file-json-format
- ファイルログハンドラー
log-syslog-json-format
- Syslog ログハンドラー
コンソールログハンドラーに ECS (Elastic Common Schema) 形式の JSON ログが必要な場合は、次のコマンドを入力できます
bin/kc.[sh|bat] start --log-console-output=json --log-console-json-format=ecs
{"@timestamp":"2025-02-03T14:53:22.539484211+01:00","event.sequence":9608,"log.logger":"io.quarkus","log.level":"INFO","message":"Keycloak 999.0.0-SNAPSHOT on JVM (powered by Quarkus 3.17.8) started in 4.615s. Listening on: http://0.0.0.0:8080","process.thread.name":"main","process.thread.id":1,"mdc":{},"ndc":"","host.hostname":"host-name","process.name":"/usr/lib/jvm/jdk-21.0.3+9/bin/java","process.pid":77561,"data_stream.type":"logs","ecs.version":"1.12.2","service.environment":"prod","service.name":"Keycloak","service.version":"999.0.0-SNAPSHOT"}
コンソールログハンドラーはデフォルトで有効になっており、コンソールに非構造化ログメッセージを提供します。
Keycloak は、デフォルトで人間が読めるテキストログを生成するパターンベースのロギングフォーマッターを使用しています。
これらの行のログ形式テンプレートは、ルートレベルで適用できます。デフォルトの形式テンプレートは次のとおりです
%d{yyyy-MM-dd HH:mm:ss,SSS} %-5p [%c] (%t) %s%e%n
形式文字列は、次の表の記号をサポートしています
記号 | 概要 | 説明 |
---|---|---|
%% |
% |
% |
単純な % 文字をレンダリングします。 |
%c |
カテゴリ |
ログカテゴリ名をレンダリングします。 |
%d{xxx} |
日付 |
指定された日付形式文字列で日付をレンダリングします。 |
%e |
例外 |
スローされた例外をレンダリングします。 |
%h |
ホスト名 |
単純なホスト名をレンダリングします。 |
%H |
完全修飾ホスト名 |
OS 構成によっては単純なホスト名と同じ場合がある完全修飾ホスト名をレンダリングします。 |
%i |
プロセス ID |
現在のプロセス PID をレンダリングします。 |
%m |
フルメッセージ |
ログメッセージと、スローされた場合は例外をレンダリングします。 |
%n |
改行 |
プラットフォーム固有の行区切り文字をレンダリングします。 |
%N |
プロセス名 |
現在のプロセスの名前をレンダリングします。 |
レベル |
%p |
ログメッセージのログレベルをレンダリングします。 |
%r |
相対時間 |
アプリケーションログの開始からの時間をミリ秒単位でレンダリングします。 |
%s |
簡易メッセージ |
例外トレースなしでログメッセージのみをレンダリングします。 |
%t |
スレッド名 |
スレッド名をレンダリングします。 |
%t{id} |
スレッド ID |
スレッド ID をレンダリングします。 |
%z{<zone name>} |
タイムゾーン |
ログ出力のタイムゾーンを <zone name> に設定します。 |
%L |
行番号 |
ログに記録された行のロギング形式を設定するには、次の手順を実行します
上記の表を使用して、目的の形式テンプレートを作成します。
bin/kc.[sh|bat] start --log-console-format="'<format>'"
次のコマンドを入力します
;
などの特殊シェル文字を含むコマンドを呼び出す場合は、文字をエスケープする必要があることに注意してください。したがって、代わりに構成ファイルで設定することを検討してください。bin/kc.[sh|bat] start --log-console-format="'%d{yyyy-MM-dd HH:mm:ss,SSS} %-5p [%c{3.}] (%t) %s%e%n'"
例: 完全修飾カテゴリ名を省略する
[%c]
の代わりにテンプレートに [%c{3.}]
を設定することにより、カテゴリ名を 3 文字に省略します。bin/kc.[sh|bat] start --log-console-output=json
{"timestamp":"2025-02-03T14:52:20.290353085+01:00","sequence":9605,"loggerClassName":"org.jboss.logging.Logger","loggerName":"io.quarkus","level":"INFO","message":"Keycloak 999.0.0-SNAPSHOT on JVM (powered by Quarkus 3.17.8) started in 4.440s. Listening on: http://0.0.0.0:8080","threadName":"main","threadId":1,"mdc":{},"ndc":"","hostName":"host-name","processName":"/usr/lib/jvm/jdk-21.0.3+9/bin/java","processId":76944}
デフォルトでは、コンソールログハンドラーはプレーンな非構造化データをコンソールに記録します。代わりに構造化された JSON ログ出力を使用するには、次のコマンドを入力します
JSON 出力を使用する場合、色は無効になり、--log-console-format
で設定された形式設定は適用されません。
bin/kc.[sh|bat] start --log-console-output=default
2025-02-03 14:53:56,653 INFO [io.quarkus] (main) Keycloak 999.0.0-SNAPSHOT on JVM (powered by Quarkus 3.17.8) started in 4.795s. Listening on: http://0.0.0.0:8080
bin/kc.[sh|bat] start --log="console,file"
ファイルへのロギングはデフォルトで無効になっています。有効にするには、次のコマンドを入力します
keycloak.log
という名前のログファイルが、Keycloak インストールディレクトリの data/log
ディレクトリ内に作成されます。ログファイルの作成場所とファイル名を変更するには、次の手順を実行します
ログファイルを保存するための書き込み可能なディレクトリを作成します。
ディレクトリが書き込み可能でない場合、Keycloak は正しく起動しますが、エラーを発行し、ログファイルは作成されません。
bin/kc.[sh|bat] start --log="console,file" --log-file=<path-to>/<your-file.log>
bin/kc.[sh|bat] start --log-file-format="<pattern>"
ファイルログハンドラーに異なるロギング形式を設定するには、次のコマンドを入力します
bin/kc.[sh|bat] start --log-file-level=warn
コンソールログハンドラーのログレベルは、--log-console-level
プロパティで次のように指定できます
--log-file-level
プロパティで次のように指定できますbin/kc.[sh|bat] start --log="console,syslog"
bin/kc.[sh|bat] start --log="console,syslog" --log-syslog-app-name=kc-p-itadmins
別のアプリケーション名を設定するには、次のように --log-syslog-app-name
オプションを追加します
keycloak
になります。bin/kc.[sh|bat] start --log="console,syslog" --log-syslog-endpoint=myhost:12345
集中ロギングシステムのエンドポイント (host:port) を設定するには、次のコマンドを入力し、値を特定の値に置き換えます
localhost
を使用しています。デフォルトポートは 514
です。bin/kc.[sh|bat] start --log-syslog-level=warn
コンソールログハンドラーのログレベルは、--log-console-level
プロパティで次のように指定できます
--log-syslog-level
プロパティで次のように指定できますbin/kc.[sh|bat] start --log="console,syslog" --log-syslog-protocol=udp
Syslog は、通信にデフォルトのプロトコルとして TCP を使用します。TCP の代わりに UDP を使用するには、次のように --log-syslog-protocol
オプションを追加します
tpc
、udp
、ssl-tcp
です。ログに記録された行のロギング形式を設定するには、次の手順を実行します
上記の表を使用して、目的の形式テンプレートを作成します。
bin/kc.[sh|bat] start --log-syslog-format="'<format>'"
次のコマンドを入力します
;
などの特殊シェル文字を含むコマンドを呼び出す場合は、文字をエスケープする必要があることに注意してください。したがって、代わりに構成ファイルで設定することを検討してください。bin/kc.[sh|bat] start --log-syslog-format="'%d{yyyy-MM-dd HH:mm:ss,SSS} %-5p [%c{3.}] (%t) %s%e%n'"
例: 完全修飾カテゴリ名を省略する
bin/kc.[sh|bat] start --log-syslog-type=rfc3164
Syslog は、特定の RFC 仕様に基づいて異なるメッセージ形式を使用します。異なるメッセージ形式で Syslog タイプを変更するには、--log-syslog-type
オプションを次のように使用します
--log-syslog-type
オプションに使用できる値は次のとおりです
rfc5424
(デフォルト)
rfc3164
bin/kc.[sh|bat] start --log-syslog-max-length=1536
送信が許可されるメッセージの最大長 (バイト単位) を設定するには、--log-syslog-max-length
オプションを次のように使用します
長さは、1k
や 1K
などの適切なサフィックスを持つメモリサイズ形式で指定できます。長さには、ヘッダーとメッセージが含まれます。
長さが明示的に設定されていない場合、デフォルト値は --log-syslog-type
オプションに基づいて次のように設定されます
2048B
- RFC 5424 の場合
1024B
- RFC 3164 の場合bin/kc.[sh|bat] start --log-syslog-output=json
2024-04-05T12:32:20.616+02:00 host keycloak 2788276 io.quarkus - {"timestamp":"2024-04-05T12:32:20.616208533+02:00","sequence":9948,"loggerClassName":"org.jboss.logging.Logger","loggerName":"io.quarkus","level":"INFO","message":"Profile prod activated. ","threadName":"main","threadId":1,"mdc":{},"ndc":"","hostName":"host","processName":"QuarkusEntryPoint","processId":2788276}
デフォルトでは、Syslog ログハンドラーはプレーンな非構造化データを Syslog サーバーに送信します。代わりに構造化された JSON ログ出力を使用するには、次のコマンドを入力します
JSON 出力を使用する場合、色は無効になり、--log-console-format
で設定された形式設定は適用されません。
bin/kc.[sh|bat] start --log-syslog-output=default
2024-04-05T12:31:38.473+02:00 host keycloak 2787568 io.quarkus - 2024-04-05 12:31:38,473 INFO [io.quarkus] (main) Profile prod activated.
JSON 出力を使用する場合、色は無効になり、--log-syslog-format
で設定された形式設定は適用されません。
--log-syslog-format
プロパティを使用してそれに応じて修正できます。関連オプション | |
---|---|
|
Env: |
|
Env: |
default
(デフォルト)、json
KC_LOG_FILE_OUTPUT
rfc5424
(デフォルト)、rfc3164