6

私はこれこれのようなSOに関する同様の質問を読みました。しかし、彼らは約4歳です!

また、私はこのログバックページを読みました。このページには、log4jではなくログバックを選択する理由に関するいくつかの非常に優れた情報があります。

次のテクノロジースタックを使用して、プロジェクトのロギングフレームワークを実装しようとしています-

  • バネ
  • Hibernate
  • Maven
  • Tomcat
  • 残り

ファサードとしてslf4jを使用することをすでに決定しているので、この質問は、slf4j+log4jを使用するかslf4j+logbackを使用するかについてです(logbackはネイティブにslf4jを使用することを知っています)。

私が探しているのは次のとおりです-

  • log4jほど成熟していない、または効率的ではないことを証明するLogbackの経験を持っている人はいますか?
  • マルチスレッド環境のlog4jと比較して、どのように公平ですか?
  • tomcatを置き換える機能-デフォルトのjulロギングをlogback/log4jロギングに置き換えます
  • ロギング構成をMavenマルチモジュールプロジェクトの共通ファイルに統合する機能
  • Logbackは、log4jよりも10倍高速であると主張していますが、誰かがその主張を検証しましたか?(私の調査の一環として、パフォーマンスを測定するためにいくつかのテストを実行する予定であり、結果を投稿します)

編集:私は多くの場所でlog4jが死んでいる/非推奨であることを読みました(以下の答えの1つはこれも述べています)。それとは反対に、log4jは2.0リリースのアルファバージョンをリリースしたばかりです。だから私はその議論を買わない。

4

1 に答える 1

11

LogBack は Log4J を成功させます。Log4J を作成した作者によるものです。Log4J は現在非推奨です。

SLF4J / LogBack がプライムされる場所の例を次に示します。

Log4J (現在)

Object entry = new SomeObject();
logger.debug("The new entry is "+entry+".");

実行されるタスクは次のとおりです。

  1. Java は、変数エントリの toString メソッドを呼び出して、文字列リテラル表現を取得します。Java は、String オブジェクトを保持するためにヒープ内のスペースを初期化します。
  2. Java は、上記の文字列に基づいて、「新しいエントリは " および "." である新しい文字列を作成します。Java は、さらに新しい文字列リテラルを保持するためにスペースを初期化します。
  3. Java は、新しく構築された String オブジェクトを入力パラメータとして Log4J に渡します。Log4J は、現在のログ レベルが DEBUG 以上であるかどうかを確認します。(logging.xml記述子でINFOに設定されていると仮定)
  4. ログ レベルが INFO に設定されているため、Log4J は文字列リテラルをログに出力しません。(そのため1~2の作業がすべて無駄になりました)

SLF4J / LogBack (新規)

Object entry = new SomeObject();
logger.debug("The new entry is {}.", entry);

実行されるタスクは次のとおりです。

  1. Java は String オブジェクト「The new entry is {}」を渡します。SLF4Jへの入力パラメータとしてのオブジェクトエントリ。SLF4J は、現在のログ レベルが DEBUG 以上であるかどうかを確認します。(logging.xml記述子でINFOに設定されていると仮定)
  2. ログ レベルが INFO に設定されているため、Log4J は文字列リテラルをログに出力しません。

http://www.slf4j.org/faq.html#logging_performance

tomcat-default jul ロギングを logback/log4j ロギングに置き換える機能はありますか?

はい、SLF4J で使用します。

于 2012-07-17T10:00:36.970 に答える