Logbackで動的にログの出力先を変更する

はじめに


といっても大したことではなく、「同僚にできないの?」って質問されたことが発端です。

やったこと無かったけど、気になったので調べてみることにしました。

業務要件的にも、以下のことはありそうな感じかなーとは思いましたがw

  • あるログはデフォルトの出力先に
  • 致命的なエラーは、ログの出力方法はそのままで別の出力先に

やり方


割りと簡単に出来ました

手順としてはこんな感じ・・・

  1. Loggerを取得する
  2. Loggerから変更対象の設定名でAppenderを取得する
  3. AppenderをFileAppenderにキャストする(コレがミソ)
  4. ログ出力を一時停止する
  5. setFileメソッドで出力先ファイルを変更する
  6. ログ出力を再開する

コードにするとこんな感じかな(loggerの取得方法は色々変りそうだけど・・・)

1
2
3
4
5
Logger logger = LoggerFactory.getLogger(LogbackLogging.class);
FileAppender<ILoggingEvent> fileAppender = (FileAppender<ILoggingEvent>) logbackLogger.getAppender("FILE");
fileAppender.stop();
fileAppender.setFile("your_new_log_file");
fileAppender.start();

実は、以下の2つのことで気が付きましたw

  • javadoc(Appenderを実装してる)
  • getAppenderメソッドの戻り値(Appenderが返される)

感想


割りと簡単にできるんですねw

後はこの処理をラップしたようなクラス&静的メソッドを作ると汎用的に使えていいのではないだろうか。。。