🌿
Spring Bootでアンダースコアを含む名前を持つロガーのログレベルを環境変数で設定する
課題
次のようにパッケージ名にアンダースコアを含むクラスで慣習的なロガーの作り方をすると、そのロガー名はcom.example.foo_bar.Baz
になります。
package com.example.foo_bar;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
@Component
public class Baz {
private static final Logger logger = LoggerFactory.getLogger(Baz.class);
public void run() {
logger.debug("Hello World");
}
}
このロガーのログレベルを環境変数で設定する場合、次の名前では機能しませんでした。
LOGGING_LEVEL_COM_EXAMPLE_FOO_BAR_BAZ
LOGGING_LEVEL_COM_EXAMPLE_FOOBAR_BAZ
SPRING_APPLICATION_JSON
で設定する
環境変数Spring Bootのリファレンスを読むと、環境変数(またはシステムプロパティ)SPRING_APPLICATION_JSON
へJSON形式で設定を書けることがわかります。
次のように環境変数SPRING_APPLICATION_JSON
を設定することで、ログレベルを設定できました。
SPRING_APPLICATION_JSON='{"logging.level.com.example.foo_bar.Baz":"debug"}'
JAVA_TOOL_OPTIONS
環境変数他の方法として環境変数JAVA_TOOL_OPTIONS
を使っても良いかもしれません。
JAVA_TOOL_OPTIONS="-Dlogging.level.com.example.foo_bar.Baz=debug"
おわりに
正直なところ、どちらの方法もやりたいことに対して複雑なため、もっと良い方法を知りたいです。
以上です。
追記
ばふぁさんがやり方を教えてくれた。
Discussion