🎉

Quarkusで特定ログメッセージのみを出力抑止する

2023/06/20に公開

Quarkusで特定のログメッセージのみ出力を抑止するという設定ができたのでメモ。使用する設定は、QuarkusガイドのCONFIGURING LOGGINGにあるLog cleanup filters - internal useのところのquarkus.log.filter."filters".if-starts-with設定です。

https://quarkus.io/guides/logging#quarkus-log-logging-log-config_quarkus.log.filter.-filters-.if-starts-with

本プロパティ設定に関する情報がぐぐってもまったくヒットしませんが、"filters"には、抑止したいログメッセージのカテゴリ名を設定するようです。Log cleanup filters - internal useと書かれているとおり、どうやらQuarkus内部で依存している様々なライブラリ(NettyやRestEasy、Hibernateなど)が問答無用で出力する特定メッセージをDEBUGレベルに変更するために、主に使われている模様。以下の添付画像はリモートデバッグでどういう値が設定されているか試しに覗いてみたときのもので、結構色々なメッセージがDEBUGに振り返られています。

使用例

Quarkusを利用するアプリケーションの例として、Keycloakがあります。このKeycloakが出力するWARNメッセージであるKC-SERVICES0053DEBUGに変更してみます。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