log4j対logback [終了]


152

自作のラッパーの背後でlog4jを使用しています。今後はさらに多くの機能を使用する予定です。

ログバックに更新する必要がありますか?

(つまり、フレームワークはSLF4Jのようなファサードではありません)


1
logbackはjakarta commons loggingとよく似ていますが、主な違いは何ですか?
matt b

12
SLF4J(ファサード)はcommons.loggingに似ています。主な違いは、commons.loggingが解決戦略を使用しているのに対して、SLF4Jは静的バインディングを使用していることです。ログバック(ファサードの「ネイティブ」(つまり、追加のラッパーレイヤーがない)実装)は、LOG4Jに匹敵しますが、より豊富なAPIを備えています。
Huxi

回答:


190

LogbackはSLF4J APIをネイティブに実装します。つまり、logbackを使用している場合は、実際にはSLF4J APIを使用しています。理論的には、logback APIの内部を直接ログに使用できますが、これはお勧めしません。ロガーに関するすべてのログバックのドキュメントと例は、SLF4J APIに関して記述されています。

したがって、logbackを使用すると、実際にはSLF4Jを使用することになります。何らかの理由でlog4jに戻したい場合は、slf4j-log4j12.jarをクラスパスにドロップするだけで、数分以内に戻すことができます。

logbackからlog4jに移行する場合、logback固有の部分、特にlogback.xml構成ファイルに含まれている部分は、同等のlog4j、つまりlog4j.propertiesに移行する必要があります。他の方向、log4jの構成に移行する場合、すなわちlog4j.propertiesは、そのlogback相当に変換する必要があります。そのためのオンラインツールがあります。構成ファイルの移行に伴う作業量は、ソフトウェアのすべてのソースコードとその依存関係全体に広まったロガー呼び出しを移行するために必要な作業よりもはるかに少ないです。


28
そのような広く普及しているソフトウェアの開発者と話をするその再会の機会。log4jをCekiに感謝します。
Srujan Kumar Gulla 2013

7
免責事項:この男は、Log4j、SLF4J、およびLogbackのすべての最初の開発者です。しかし、Log4jではもう機能しません。
Victor Stafusa

56

しますか? はい

どうして? Log4Jは基本的にLogbackによって非推奨になりました。

緊急ですか?そうでないかもしれない。

痛くないですか?おそらく、それはあなたのロギングステートメントに依存するかもしれません。

LogBack(またはSLF4J)を最大限に活用したい場合は、適切なロギングステートメントを書く必要があることに注意してください。これにより、遅延評価によるコードの高速化、ガードの回避によるコード行の削減などの利点が得られます。

最後に、私はSLF4Jを強くお勧めします。(なぜあなた自身のファサードでホイールを再現するのですか?)


48
注:log4jプロジェクトでは、log4jが非推奨と見なされていません。
–ThorbjørnRavn Andersen、2011

17
用語を明確にする必要があります。明らかに、log4jプロジェクトの作成者は、logbackを log4j の後継者見なしています。それは両方のプロジェクトの同じ著者なので、彼の意見にはある程度の重みが必要です。「log4jプロジェクト」自体は、実際には何も「考慮」しません。log4jに関連する現在の人々のグループは、意見が分かれています(実際に同意する人もいれば、驚くほど同意しない人もいます)。私たちの背後にもう少し歴史があります(元のコメントから3年後)。SLF4J+ Logbackは、Log4jよりも優位に立っています。
マイケル2013

@michael_n Log4j 1は一人で書かれたものではないことに注意してください。「同じ作者」と言うのは間違いです。Cekiは間違いなく重要な作家ですが、唯一の作者ではありません。実際、多くの人々がLog4j 1をそれが何であるかを作るのに助けました。
クリスチャン

もちろん、@ Christianは「書かれていません...」でした。これは、成熟したapacheプロジェクト(および私の資格、「log4jに関連付けられている現在の人々のグループ」)を意味するものです。それにもかかわらず、コメントを編集できた場合、ウィキペディアの記事にも記載されているように、「最初に作成された」と言います。再:「実際、多くの人々がLog4j 1をそれがそうであるように作るのを助けました」、それは絶対的に、多義的に真実です(すなわち、良くも悪くも)。また、いくつかの小さな方法で、slf4j + logbackの開始に貢献しました:-)
マイケル

3
それで、あなたやこのロギングライブラリをめぐって争うために何が必要ですか?ライブラリを強制終了/昇格しようとするのはなぜですか?少なくとも合理的な推論を提供してください。なぜ一方が他方よりも優れているのですか。神様、スタックオーバーフローは混乱です。
ユーザー

48

ロギングの世界には、ファサード(Apache Commons Logging、slf4j、またはLog4j 2.0 APIなど)と実装(Log4j 1 + 2、java.util.logging、TinyLog、Logback)があります。

基本的に、自分で作ったラッパーをslf4j IFに置き換える必要があります。何らかの理由で満足できない場合のみです。Apache Commons Loggingは実際には最新のAPIを提供していませんが、slf4jと新しいLog4j 2ファサードがそれを提供しています。かなりの数のアプリがslf4jをラッパーとして使用していることを考えると、それを使用することには意味があります。

slf4jは、slf4j docsの次の例のように、いくつかの素晴らしいAPIシュガーを提供します。

logger.debug("Temperature set to {}. Old temperature was {}.", t, oldT);

変数の置換です。これはLog4j 2でもサポートされています。

ただし、slf4jは、ログバックも維持するQOSによって開発されていることに注意する必要があります。Log4j 2.0は、Apache Software Foundationで作成されています。過去3年間で、活気のある活発なコミュニティが再び成長しました。Apache Software Foundationによってすべての保証が行われているオープンソースを高く評価している場合は、Log4j 2を直接使用することを優先して、slf4jを使用することを再検討することができます。

ご注意ください:

以前は、Log4の場合、log4j 1は積極的に保守されていませんでした。しかし、今日は状況が異なります。Log4j 2は積極的にメンテナンスされ、ほぼ定期的にリリースされます。また、多くの最新機能が含まれており、-imho-はLogbackよりもいくつかの点で優れています。これは時々好みの問題であり、あなた自身の結論を引き出す必要があります。

Log4j 2.0の新機能の概要を簡単に書きました:http ://www.grobmeier.de/the-new-log4j-2-0-05122012.html

読んでいると、Log4j 2はLogbackだけでなく他のロギングフレームワークにも触発されていることがわかります。しかし、コードベースは異なります。Log4j 1とはほとんど何も共有せず、Lo​​gbackとはゼロを共有します。これは、Log4j 2の例のようないくつかの改善につながり、内部では文字列の代わりにバイトストリームを使用します。また、再構成中にイベントが失われることもありません。

Log4j 2は、私が知っている他のフレームワークよりも高速でログを記録できます。http//www.grobmeier.de/log4j-2-performance-close-to-insane-20072013.html

それでも、ユーザーコミュニティはログバックよりもはるかに大きいようです:http ://www.grobmeier.de/apache-log4j-is-the-leading-logging-framework-06082013.html

最良のアイデアは、達成したいものに最適なロギングフレームワークを選択することです。本番環境でロギングを無効にして、アプリで基本的なロギングを実行するだけでは、完全なフレームワークを切り替えません。ただし、ロギングをもう少し行う場合は、フレームワークとその開発者が提供する機能を確認してください。QOSを介してLogbackの商用サポートを取得している間(聞いたところ)、Log4j 2の商用サポートは現在ありません。一方、監査ロギングを実行する必要があり、非同期アペンダーによって提供される高いパフォーマンスが必要な場合は、 log4jを確認します2。

彼らが提供するすべての快適さにもかかわらず、ファサードは常に少しパフォーマンスを食べることに注意してください。まったく影響がないかもしれませんが、リソースが不足している場合は、すべての情報を保存する必要があります。

要件をよく知らなければ、推奨を与えることはほとんど不可能です。ただ:多くの人が切り替えるからといって切り替えないでください。あなたはそれの価値を見ているからといって切り替えます。そして、log4jが死んでいるという主張はもう数えられません。生きていて暑いです。

免責事項:私は現在、Apache Logging ServicesのVPであり、log4jにも関わっています。


19

質問に正確に答えていませんが、自作のラッパーから離れることができる場合は、Hibernateが(Commons Loggingの代わりに)切り替えたSimple Logging Facade for Java(SLF4J)があります。

SLF4Jは、クラスローダーの問題や、Jakarta Commons Logging(JCL)で観察されるメモリリークの影響を受けません。

SLF4Jは、JDKロギング、log4j、およびlogbackをサポートしています。そのため、適切なタイミングでlog4jからlogbackに切り替えるのはかなり簡単です。

編集:私が明確にしていない謝罪。SLF4Jを使用して、log4jとlogbackのどちらかを選択する必要がないようにすることを提案しました。


3
私はSLF4Jを知っています。しかし、ファサードではなくログフレームワークを求めました!

4
謝罪。私が提案していたことは、独自のカスタムファサードの代わりにSLF4Jを使用している場合、log4jからlogbackへの切り替えはそれほど簡単ではないということです。
ツールキット、

その引用の出所は何ですか?Commons Loggingは、実証済みのコンポーネントです。これでメモリリークが発生したことは一度もありません。
Kshitiz Sharma

1
@KshitizSharma-私が提供したSLF4Jドキュメントリンクから:slf4j.org/manual.html
ツールキット

13

あなたの決定は

  • これらの「その他の機能」に対する実際のニーズ。そして
  • 変更を実装するための予想コスト。

APIが「より新しく、より輝きがあり、より優れている」からといって、APIを変更したいという衝動に抵抗する必要があります。私は「壊れていなければ蹴らないでください」という方針に従います。

アプリケーションで非常に高度なロギングフレームワークが必要な場合は、その理由を検討することをお勧めします。


3

成熟したプロジェクト、または開発段階の深いプロジェクトでさえ、おそらくそのようなアップグレードから得られる利益よりも失うことになるでしょう。Logbackは確かに一連のポイントではるかに進んでいますが、実際のシステムでの完全な置き換えの範囲ではありません。私は確かに新しい開発のためにlogbackを検討しますが、既存のlog4jは十分に優れており、すでにリリースされてエンドユーザーに会ったすべてのものに対して成熟しています。これは非常に主観的なものであり、自分でコストを確認する必要があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.