Java Logging vs Log4J [終了]


134

log4jライブラリをJava 5プロジェクトに追加してログを記録するだけの価値はありますか。たとえば、いくつかの優れたロールオーバー設定を持つファイルの例外を考えてみましょう。または、標準のutil.logging機能でも同じことができますか?

どう思いますか?


考慮すべき多くのlog4j 1.2ロック問題については、stackoverflow.com / a / 13144054/603516を参照してください。
Vadzim、2012年

回答:


115

おそらく、util.loggingを使用して、説明したニーズに対応できます。

適切な決定木については、Log4jとjava.util.loggingご覧ください。

質問1:SMTPHandler、NTEventLogHandler、または非常に便利なFileHandlerなど、JULにはないLog4jの巧妙なハンドラーの必要性を予想していますか?

質問2:ログ出力の形式を頻繁に切り替えたいと思っていますか?簡単で柔軟な方法が必要ですか?つまり、Log4jのPatternLayoutが必要ですか?

質問3:アプリケーションの複雑なロギング設定をコンパイルして本番環境にデプロイした後、それらを変更する機能の明確な必要性を予期していますか?「このクラスからの重大なメッセージは電子メールでサポート担当者に送信されます。クラスのサブセットからの重大なメッセージはサーバー上のsyslogデーモンに記録されます。クラスの別のサブセットからの警告メッセージは記録されます。ネットワークドライブAのファイルに保存すると、どこからでもすべてのメッセージがネットワークドライブBのファイルに記録されます。そして、あなたは自分が数日ごとにそれを微調整しているのを見ますか?

上記の質問のいずれかに「はい」と答えられる場合は、Log4jを使用してください。それらすべてに対して明確な「いいえ」と答えると、JULは十分すぎるほどで、SDKに既に含まれているので便利です。

そうは言っても、他のいくつかのライブラリーが使用しているからといって、最近のほとんどすべてのプロジェクトはlog4jを含めて終了するようです。


1
素晴らしいアンケートに基づく回答。ニーズに基づいて自分自身に。
HopeKing 2017年

43

Simple Logging Facade for Java(SLF4J)を使用することをお勧めします。Log4Jを含むさまざまなプロバイダーをサポートし、Apache Commons Loggingの代替として使用できます。


6
Commons Loggingの何が問題になっていますか?
Bart van Heukelom、2010

5
@Bart van Heukelomとコメントの賛成者- 記事を
スティーブンC

4
@Stephen C:情報をありがとうございます。少し前にそれを知っており、できる限りいつでもSLF4Jを使用しています。(私のコメントは本当の質問でしたが、保守的な発言ではありませんでした)
Bart van Heukelom 2011年

1
@ Bart、Commons Loggingは、使用するパッケージの動的検出を使用します。SLF4Jを使用する(または使用する)には、バックエンドのクラスをまったくロードする必要があります。
するThorbjörnRavnアンデルセン

21

Log4jは長い間使用されており、非常にうまく機能します。私にはそれを裏付ける科学的研究はありませんが、私が多数のクライアントで見たものに基づいて、私が他の何よりも多く使用しているのを見るのは簡単にロギングフレームワークです。それは長い間存在しており、何かを言うNext Big Logging Frameworkに取って代わられていません。

設定は非常に簡単で、基本的なアペンダー(出力)を簡単に学ぶことができます。次のものを含む、利用可能なホストアペンダー全体があります。

  1. ConsoleAppender
  2. DailyRollingFileAppender
  3. ExternallyRolledFileAppender
  4. FileAppender
  5. JDBCAppender
  6. JMSAppender
  7. NTEventLogAppender
  8. RollingFileAppender
  9. SMTPAppender
  10. SocketAppender
  11. SyslogAppender
  12. TelnetAppender
  13. WriterAppender

プラス他。独自のアペンダーを作成することも難しくありません。さらに、ログに出力される内容を具体的に制御できるように、各アペンダーには大きな柔軟性があります。

1つのメモとして、log4jに加えてApache Commons Loggingを使用すると、一連のクラスローダーの問題が発生しました。これは特定の1つのアプリケーションのみを対象としたものですが、コモンズロギングなどの抽象化レイヤーを使用する場合に柔軟性を提供するよりも、log4jを単独で使用する方が簡単であることがわかりました。

詳細については、この記事を 参照してください

幸運を!


17

java.util.loggingは、他のいくつかが提供する過剰な手荷物なしで包括的なロギングパッケージを提供します。


5
さらに、それはデフォルト含まれ、Java自体によって使用されます(とにかくそれ使用します!)
QUIT付き-Anony-Mousse

7

log4jは全体的にはるかに優れたパッケージであり、java.util.loggingに含まれている問題の一部がありません。第二に、logsjを直接使用する方が、commonsロギングを使用するよりも簡単です。


3
java.util.loggingの問題点を具体的に教えていただけますか?
2015年

確かに、synchronizedメソッドをログでのオーバーヘッドのように:見github.com/playframework/playframework/issues/6958bugs.openjdk.java.net/browse/JDK-8077846
ウィル・サージェント

4

ロギングインターフェイスとしてApache Commmons Loggingを使用することをお勧めします。これにより、コードの変更を必要とせずに、いつでもロギングの実装を柔軟に切り替えることができます。


3

私はlog4jで行きます。log4jでの可能性は時代遅れではありません!

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