1. ホーム
  2. java

[解決済み] Javaでログを取るってどうなんだろう?[クローズド]

2022-05-14 08:27:32

質問

なぜ、次のパッケージのうちの一つを他のパッケージの代わりに使うのでしょうか?

  • Java ロギング
  • コモンズロギング
  • Log4j
  • SLF4j
  • ログバック

どのように解決するのですか?

apiが登場した年代順です(私が知る限り)。

  • Log4j なぜなら、ほとんどの人がそれを使っているからです(私の経験では)。
  • Commons Logging なぜなら、オープンソースプロジェクトはそれを使うからです(だから、統合ソリューションで使われるどんなロギングフレームワークとも統合できます); あなたがAPI/フレームワーク/OSSで、Commons Loggingを使う他のパッケージに依存している場合は特に有効です。
  • 特定のロギング フレームワークにロックダウンしたくないので Commons Logging を使用する(その代わりに Commons Logging が提供するものにロックダウンする) - この点を理由にして決めるのは賢明ではないと思います。
  • 追加の jar を追加したくないので、Java ロギングを使用します。
  • SLF4jはCommons Loggingより新しく、パラメータ化されたロギングを提供するからです。

logger.debug("The entry is {}.", entry);
//which expands effectively to
if (logger.isDebugEnabled()){
    // Note that it's actually *more* efficient than this - see Huxi's comment below...
    logger.debug("The entry is " + entry + "."); 
}

  • Logbackはlog4jより新しく、また、SLF4jを直接実装しているので、パラメータ化されたロギングをサポートするからです。
  • SLF4j/Logbackはlog4jを作った人と同じ人が書いているので、より良いものに仕上がっているからです(曰く Ken G - のおかげです。 を見ると合っているような気がします。 以前のニュース記事 )
  • SLF4jは、彼らがlog4jアダプタも公開しているので、古いコードでlog4jを "スイッチアウト" する必要はありません - log4j.properties にSLF4jとその設定を使わせるだけでよいからです。