SpringBoot 2.x系+actuatorでHTTP経由でログレベルを動的に切り替える


概要

このエントリでは、Spring Boot 2.x系を使っているときに、Spring Boot Actuatorで、ログレベルを動的に変更する方法を確認します。

準備

Actuatorを使う

build.gradle

dependencies {
(中略)
    implementation 'org.springframework.boot:spring-boot-starter-actuator'

Actuatorの設定

application.yaml

management:
  endpoints.web.exposure.include: loggers
  endpoint.loggers.enabled: true

確認

ここでは、Spring Frameowrk全体のログレベルを変更します。
開発時や動作確認時などに、一時的にログを出したい場合などを想定しています。

起動直後

Actuatorが公開しているURLにアクセスすることで、現在の状態を確認できます。

下図は、別エントリ「SpringBootとH2 DBとJPA RESTで、郵便番号をREST APIで検索してみる~作るクラスは3つだけ~」で作ったものに、上記の設定を加えて起動した直後、http://localhost:8080/actuator/loggers にアクセスしたものです。(ブラウザの機能で、JSONをきれいに表示されています)

このエンドポイントに、POSTで異なるログレベルを送信します。下記では、curlコマンドを使っています。

curl -i -X POST -H 'Content-Type: application/json'\
 -d '{"configuredLevel": "TRACE"}'\
 http://localhost:8080/actuator/loggers/org.springframework

コンソールで確認すると、ログレベル変更後、TRACEレベルのログが出力されています。下図は、IntelliJ IDEAでgradle bootRunしているコンソールの様子です。

おわりに

本エントリでは、タイトルに示した内容を確認しました。
開発時など、ログを一時的に沢山出力したくなる時に便利だと思います。

ログレベルを切り替える方法は、本エントリのほかにもあり、例えばlogbackの設定ファイル変更のウォッチ機能を使っても実現できます。
本エントリの方法は、POST一発で変更できるという点でお手軽だと思います。

今回のエントリに関係するコードは、このPRで確認できます