2017-05-19 3 views
0

私は現在、私は追加していなかったはどんな違い

Log4jContextSelector

のプロパティを設定せずに2 は私log4j2を構成していたのロギングフレームワークのlog4jを模索していますを作るLog4jContextSelectorのプロパティを設定してい私のビルドパスに混乱の瓶。

詳細については、後でこの文章を読んだ。

私は、このプロパティを設定して、コメントを追加した場合

すべてのロガーが非同期にするために -DLog4jContextSelector = org.apache.logging.log4j.core.async.AsyncLoggerContextSelector システムプロパティを設定することを忘れないでください。混乱の瓶、私はどんな顕著な性能改善も見なかった。

メインメソッドの最初の行に以下の行を追加しました。

System.setProperty("Log4jContextSelector", 
       "org.apache.logging.log4j.core.async.AsyncLoggerContextSelector"); 

私は、このテスト中に生成されるログの総量は、これは私は、このプロパティを設定する天気がどんな違いを生むんだと思い作っ47.3メガバイト

のですか? Log4j2を使用している場合は、デフォルトで非同期です。 1のlog4j-API-2.8.2.jar 2のlog4j-2.8.2.jarコア 3.かく乱3.2.0.jar

UPDATE:

私は、次のjarファイルを使用しています: は、log4j2-perfでbenchmark.jarを実行しました。メトリックの印刷が開始されます。私はどのように同期ロガーとそれを比較するために測定基準を使用することができます理解できません。

答えて

1

Log4j2はデフォルトで同期します。あなたが言及するシステムプロパティは、すべてのロガーが非同期になるという効果があります。

あなたのしていることは正しいようです。パフォーマンスがどのように影響を受けているかはわかりませんが、これをどのように測定しようとしているのかは不明です。

Disruptorを使用した非同期ロギングの利点は、アプリケーションで複数のスレッドが同時にログを記録したり、多数のメッセージをバーストでログに記録する必要がある場合に顕著になります。非同期ロギングとは、他の作業を行う前に、ログメッセージの書式設定やI/Oが完了するのをアプリケーションが待つ必要がないことを意味します。

パフォーマンスの測定は容易ではありませんが、アプリケーションの拡張が可能である必要がある場合は時間を投資する価値があります。 Log4j2 performanceページには、方法論とテクニック、およびパフォーマンステストコードへのリンクがあります。

0

Log4jmain methodを呼び出す前に初期化されています。 したがって、あなたのプロパティLog4jContextSelectorをシステムから選ぶことができず、デフォルトでは同期して動作します。

同じことを確認するには disruptor依存関係を削除してください。プロジェクトがまだ上がっている場合は、非同期になっていません。

DLog4jContextSelector=org.apache.logging.log4j.core.async.AsyncLoggerContextSelector でプロパティを追加した場合、混乱プロジェクトを取り除いた後は上がりません。

tomcatを使用している場合は、catalina.propertiesにシステムプロパティを追加します。そして、immediateFlush="false"を使用することを忘れないでください。

関連する問題