😸
SpringBootにおけるログライブラリの選定してみた
前提
ログライブラリは、下記の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