Lambdaカクテル

京都在住Webエンジニアの日記です

Invite link for Scalaわいわいランド

Logbackでプログラムからログレベルを動的に変更する in Scala

ZMMの開発で、動的にログレベルを変更したいということがあった。具体的には、--verboseをつけるたびにログレベルを上げて詳細な情報を吐き出してほしい。

結論から言うと、以下のようにすればよい。

stackoverflow.com

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));
  }

そもそもログレベルを変更するのにはいくつか方法があって、環境変数から変更することも可能。

qiita.com

ところが環境変数はそもそも実行中に変更することは想定しないようなものなので、今回のようにLoggerを取ってきてrootのログレベルを修正した。あまりScalaっぽくないが、まぁしょうがない。

★記事をRTしてもらえると喜びます
Webアプリケーション開発関連の記事を投稿しています.読者になってみませんか?