log4j2なぜlog4jではなくそれを使用するのですか?

スコットネビル:

私は何かが足りないはずですが、私はこれを数日間見てきましたが、なぜ地球上でlog4jよりもlog4j2を使用するのですか(パフォーマンス以外)?

これまで見てきたことから、log4j2は設定がより簡単であると宣伝されていますが、実際には非常に複雑です(3日たっても、ホームディレクトリにログを書き込むことができません)。自動構成は単に私にとっては機能しません(または少なくとも機能させることができません)。構成ファイル自体の構造はかなり複雑であり、診断時に役立つように実行時に追加するのははるかに難しいようです。

では、パフォーマンス以外に、元のlog4jよりもlog4j2を使用する理由はありますか?

レムコポプマ:

Log4j 1.xからLog4j 2にアップグレードする理由

更新:2015年8月以降、Log4j 1.xは正式サポート終了となり、Log4j 2にアップグレードすることをお勧めします。更新2:Log4j 1.2はJava 9で壊れています

  • コミュニティサポート:Log4j 1.xは積極的にメンテナンスされていませんが、Log4j 2には質問への回答、機能の追加、バグの修正を行うアクティブなコミュニティがあります。
  • 非同期ロガー - ロギングをオフにした場合と同様のパフォーマンス
  • カスタムログレベル
  • 再構成中にログイベントを失うことなく、変更時に構成を自動的にリロードします。
  • レイジーロギングのJava 8スタイルラムダサポート
  • Log4j 2は、バージョン2.6以降、ガベージフリー(または少なくとも低ガベージ)です。
  • フィルタリング:コンテキストデータ、マーカー、正規表現、およびログイベント内の他のコンポーネントに基づくフィルタリング。フィルターはロガーに関連付けることができます。これらの状況のいずれでも、共通のFilterクラスを使用できます。
  • プラグインアーキテクチャ -カスタムコンポーネントを構築することで拡張が容易
  • サポートされるAPI:SLF4J、Commons Logging、Log4j-1.xおよびjava.util.logging
  • Log4j 2 APIは、Log4j 2実装とは別のものです。APIは、文字列のロギングだけでなく、CharSequences、Objects、カスタムメッセージをサポートしていますメッセージを使用すると、興味深い複雑な構造のサポートをロギングシステムに渡し、効率的に操作できます。ユーザーは自由に独自のメッセージタイプを作成し、それらを操作するためのカスタムレイアウト、フィルター、ルックアップを作成できます。
  • 並行性の改善:log4j2はjava.util.concurrentライブラリーを使用して、可能な最低レベルでロックを実行します。Log4j-1.xには既知のデッドロック問題があります。
  • XML、JSON、YAML、プロパティ構成ファイル、またはプログラムによる構成。

注意してください

  • log4j2.xmlおよびlog4j2.propertiesの形式は、Log4j 1.2構成構文とは異なります
  • Log4j 2はLog4j 1.xと完全に互換性がありません:Log4j 1.2 APIはlog4j-1.2-apiアダプターによってサポートされますが、Log4j 1.2内部に依存するカスタマイズは機能しない可能性があります。
  • バージョン2.0から2.3にはJava 6が必要です。Log4j 2.4以降にはJava 7が必要です。

アップグレード時のヒント

log4j2を使い始めるときに人々が抱えている一般的な問題:

  • クラスパスに少なくとも)log4j-api-2.6.2.jarとlog4j-core-2.6.2.jarの両方が必要です
  • Log4j2は、log4j.xml構成ファイルではなく、log4j 2 .xml構成ファイルを探します。
  • 構成ファイルの場所:クラスパスに配置するか、log4j.configurationFileシステムプロパティでパスを指定します
  • 設定デバッグするに<Configuration status="trace">は、設定ファイルの最初で使用します
  • log4j2マニュアルで提供されている多くのサンプル構成の1つから始めて、少しずつベルとホイッスルを追加することをお勧めします。

問題が上記のいずれでもない場合は、構成を表示し、発生している問題の詳細を提供してください。(自動構成で何が期待できるかわからない。これは、log4j2が構成ファイルを見つけられない場合にERRORイベントをコンソールに記録する非常に基本的な機能です。これで十分になることはめったにありません。)

ホームディレクトリに書き込むには、システムプロパティlookupを 使用できます${sys:PROPERTYNAME}以下は、設定例です。

<Configuration status="trace">
  <Properties>
    <Property name="logfile">${sys:user.home}/log${date:yyyyMMdd}.log</Property>
  </Properties>
  <Appenders>
    <Console name="STDOUT" target="SYSTEM_OUT">
      <PatternLayout pattern="%m%n"/>
    </Console>
    <File name="FILE" fileName="${sys:logfile}">
      <PatternLayout>
        <pattern>%d %p [%t] %c{1.} %m%n</pattern>
      </PatternLayout>
    </File>
  </Appenders>
  <Loggers>
    <Root level="trace">
      <AppenderRef ref="STDOUT" level="ERROR" />
      <AppenderRef ref="FILE" />
    </Root>
  </Loggers>
</Configuration>

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

なぜLog4jはlog4j.dtdを見つけようとしているのですか

分類Dev

%dまたは%sを使用するのではなく、{}を使用するLog4j2

分類Dev

それは価値log4j2でSLF4Jを使用することです

分類Dev

log4jで使用すると、fillInStackTrace()の方が安くなりますか?

分類Dev

Log4j2がログをファイルに書き込まないのはなぜですか?

分類Dev

なぜこの奇妙なlog4j例外が発生するのですか?

分類Dev

Gradleを更新するとlog4jのインポートが中断するのはなぜですか?

分類Dev

log4j2-spring.xmlでspringProfileタグを使用して、異なるSpringプロファイルでlog4j2を構成できないのはなぜですか?

分類Dev

なぜlog4jのLogger.getLogger()はクラス型を渡す必要があるのですか?

分類Dev

log4j2でslf4jを使用する

分類Dev

Log4j2がSpring Boot Application内でロギングしないのはなぜですか?

分類Dev

log4j2で動的な日付を提供する

分類Dev

log4j2 を使用する場合、サードパーティの jar で使用される "org/apache/log4j/Level" クラスを処理するにはどうすればよいですか?

分類Dev

2つのMavenWebモジュールを使用しながらlog4jを適切に使用するにはどうすればよいですか?

分類Dev

log4j StringMatchFilterをlog4j2に変換する方法は?

分類Dev

log4jでSMTPAppenderを構成する適切な方法は何ですか?

分類Dev

Log4j 2SLF4JバインディングとLog4j2 toSLF4Jアダプターの違いは何ですか

分類Dev

log4jで、「OFF」が最高のログレベルであるのはなぜですか?

分類Dev

log4jで、「OFF」が最高のログレベルであるのはなぜですか?

分類Dev

log4jにAmqpAppenderを使用するにはどのような依存関係が必要ですか?

分類Dev

Log4jログがコンソールに表示されないのはなぜですか?

分類Dev

log4j2にすべてを表示するのではなく、繰り返し行を数えますか?

分類Dev

log4j 1.2からlog4j 2への移行で、DailyRollingFileAppenderクラスをどうするか?

分類Dev

Log4j2 - 「ロガー」要素が「ルート」ロガーからコンテンツを隠しているのはなぜですか?

分類Dev

同じ例外が(何度も)繰り返された後、log4jがスタックトレースを無効にするのはなぜですか?

分類Dev

ロードされたlog4j2構成の完全なパスを見つけるにはどうすればよいですか?

分類Dev

異なるログファイルでlog4j2を使用する方法は?

分類Dev

Tomcatのlog4j2ログパスを変更するにはどうすればよいですか?

分類Dev

Apache storm 1.2.2が使用するlog4j2のバージョンはどれですか?

Related 関連記事

  1. 1

    なぜLog4jはlog4j.dtdを見つけようとしているのですか

  2. 2

    %dまたは%sを使用するのではなく、{}を使用するLog4j2

  3. 3

    それは価値log4j2でSLF4Jを使用することです

  4. 4

    log4jで使用すると、fillInStackTrace()の方が安くなりますか?

  5. 5

    Log4j2がログをファイルに書き込まないのはなぜですか?

  6. 6

    なぜこの奇妙なlog4j例外が発生するのですか?

  7. 7

    Gradleを更新するとlog4jのインポートが中断するのはなぜですか?

  8. 8

    log4j2-spring.xmlでspringProfileタグを使用して、異なるSpringプロファイルでlog4j2を構成できないのはなぜですか?

  9. 9

    なぜlog4jのLogger.getLogger()はクラス型を渡す必要があるのですか?

  10. 10

    log4j2でslf4jを使用する

  11. 11

    Log4j2がSpring Boot Application内でロギングしないのはなぜですか?

  12. 12

    log4j2で動的な日付を提供する

  13. 13

    log4j2 を使用する場合、サードパーティの jar で使用される "org/apache/log4j/Level" クラスを処理するにはどうすればよいですか?

  14. 14

    2つのMavenWebモジュールを使用しながらlog4jを適切に使用するにはどうすればよいですか?

  15. 15

    log4j StringMatchFilterをlog4j2に変換する方法は?

  16. 16

    log4jでSMTPAppenderを構成する適切な方法は何ですか?

  17. 17

    Log4j 2SLF4JバインディングとLog4j2 toSLF4Jアダプターの違いは何ですか

  18. 18

    log4jで、「OFF」が最高のログレベルであるのはなぜですか?

  19. 19

    log4jで、「OFF」が最高のログレベルであるのはなぜですか?

  20. 20

    log4jにAmqpAppenderを使用するにはどのような依存関係が必要ですか?

  21. 21

    Log4jログがコンソールに表示されないのはなぜですか?

  22. 22

    log4j2にすべてを表示するのではなく、繰り返し行を数えますか?

  23. 23

    log4j 1.2からlog4j 2への移行で、DailyRollingFileAppenderクラスをどうするか?

  24. 24

    Log4j2 - 「ロガー」要素が「ルート」ロガーからコンテンツを隠しているのはなぜですか?

  25. 25

    同じ例外が(何度も)繰り返された後、log4jがスタックトレースを無効にするのはなぜですか?

  26. 26

    ロードされたlog4j2構成の完全なパスを見つけるにはどうすればよいですか?

  27. 27

    異なるログファイルでlog4j2を使用する方法は?

  28. 28

    Tomcatのlog4j2ログパスを変更するにはどうすればよいですか?

  29. 29

    Apache storm 1.2.2が使用するlog4j2のバージョンはどれですか?

ホットタグ

アーカイブ