😸

SpringBootにおけるログライブラリの選定してみた

2024/09/09に公開

前提

ログライブラリは、下記の2つに大別される

  • ログ出力のAPIを提供(ファサード)
    • 実装時に下記のコマンドでログを出力する
      // ログインスタンス作成
      Logger logger = LoggerFactory.getLogger("MyClass.class")
      // ログ出力
      logger.debug("Debug message")
      
  • 実際のログ出力機能を提供(ロギング実装)
    • どのようにログを出力するのか(ログレベルなど)

利用できそうなログライブラリ一覧

ファサード

  • SLF4J(Simple Logging Facade for Java)
    • ファサードのみ提供しており、ログ出力機能を提供しないため、ロギング実装のライブラリが必要。スイスのQOS.chから提供。
  • log42
    • ファサード、ログ出力機能の両方を提供。

ロギング実装

  • Java Util Logging (JUL)
    • 標準ライブラリに含まれるが、ログレベルが特殊(Debugがなかったり、ERRORもない)ので個人的には使えそうにない。
  • Apache Log4j2
    • Apache Software Foundation(ASF)から提供されるフレームワーク。高度なパフォーマンスとカスタマイズ。Log4jの改良版。高度で複雑なロギングが可能だが、学習コストが高い。大規模システムではこちらがよいらしい。
  • LogBack
    • ログ実装のみを提供。Springbootのデフォルトログライブラリ。追加の設定が殆どいらない。シンプルかつ高性能。スイスのQOS.chから提供。

ではどれがいいのか

  • 機能としてはlog4j2>Logback
  • ただ必要な機能はLogbackでも満たしているので、規模が大きくパフォーマンスを求められるアプリではLog4j2が好まれる
  • SpringBootで利用する場合は設定が簡単であるため、今回はLogbackを採用する。

Discussion