Quarkusで特定ログメッセージのみを出力抑止する
Quarkusで特定のログメッセージのみ出力を抑止するという設定ができたのでメモ。使用する設定は、QuarkusガイドのCONFIGURING LOGGINGにあるLog cleanup filters - internal use
のところのquarkus.log.filter."filters".if-starts-with
設定です。
本プロパティ設定に関する情報がぐぐってもまったくヒットしませんが、"filters
"には、抑止したいログメッセージのカテゴリ名を設定するようです。Log cleanup filters - internal use
と書かれているとおり、どうやらQuarkus内部で依存している様々なライブラリ(NettyやRestEasy、Hibernateなど)が問答無用で出力する特定メッセージをDEBUG
レベルに変更するために、主に使われている模様。以下の添付画像はリモートデバッグでどういう値が設定されているか試しに覗いてみたときのもので、結構色々なメッセージがDEBUG
に振り返られています。
使用例
Quarkusを利用するアプリケーションの例として、Keycloakがあります。このKeycloakが出力するWARN
メッセージであるKC-SERVICES0053
をDEBUG
に変更してみます。Quarkusの設定はJVMシステムプロパティでも設定できるので、今回はその方法で設定しています。KC-SERVICES0053
のメッセージのカテゴリはorg.keycloak.services
なので、quarkus.log.filter."org.keycloak.services".if-starts-with=KC-SERVICES0053
を設定することでDEBUG
レベルとなり、通常の運用時には出力を抑止することができます。
docker run -it --rm -p 8080:8080 \
-e KEYCLOAK_ADMIN=admin \
-e KEYCLOAK_ADMIN_PASSWORD=admin \
-e 'JAVA_OPTS_APPEND=-Dquarkus.log.filter.\"org.keycloak.services\".if-starts-with=KC-SERVICES0053' \
quay.io/keycloak/keycloak:21.1.1 start-dev --log-level debug
でデバッグログ出力モードでKeycloakコンテナを起動し、該当のメッセージを出力すると
2023-06-20 04:35:18,640 DEBUG [org.keycloak.services] (Brute Force Protector) KC-SERVICES0053: login failure for user 9ccada69-3157-42ad-bda4-7d3c79faebf4 from ip 172.17.0.1
とDEBUG
レベルで出るようになったのを確認できます。
Discussion