ZMMの開発で、動的にログレベルを変更したいということがあった。具体的には、--verbose
をつけるたびにログレベルを上げて詳細な情報を吐き出してほしい。
結論から言うと、以下のようにすればよい。
Scalaだと以下のようなコードを書いた。
private def setLogLevel(level: String): Unit = { // https://stackoverflow.com/a/3838108 import org.slf4j.LoggerFactory import ch.qos.logback.classic.Level import ch.qos.logback.classic.Logger val root: Logger = LoggerFactory .getLogger(org.slf4j.Logger.ROOT_LOGGER_NAME) .asInstanceOf[Logger] root.setLevel(Level.toLevel(level)); }
そもそもログレベルを変更するのにはいくつか方法があって、環境変数から変更することも可能。
ところが環境変数はそもそも実行中に変更することは想定しないようなものなので、今回のようにLoggerを取ってきてrootのログレベルを修正した。あまりScalaっぽくないが、まぁしょうがない。