2010-12-01 13 views
2

Log4j v1.2.14を使用しています。我々はすでにorg.apache.log4j.ConsoleAppenderを使用しており、現在はの回転ログが必要です。このため、org.apache.log4j.DailyRollingFileAppenderを使用して毎日の回転ログを作成する予定です。Log4j DailyRollingFileAppenderとConsoleAppenderのパフォーマンス

DailyRollingFileAppenderはConsoleAppenderと比べてパフォーマンスが向上していますが、各印刷文でファイルをローテーション/ロールオーバーする必要があるかどうかをさらにチェックする必要があります。

また、ご意見、ご感想などもありがとうございます。

+0

あなたはソースコードを見て、見つけ出すことができます。 – skaffman

+0

@skaffman:OK。一般的に、これに関する他のユーザーの経験/意見は何ですか? – Gnanam

答えて

2

あなたの引数は正しいですし、ロジックは、オーバーヘッド/パフォーマンスへの影響が存在することを指示します。いくら?あなたがパフォーマンスヒットを恐れている場合は、あなた自身でそれを測定する必要があります。

これは本当にいくつのロギングステートメントがあるかによって異なります。あなたがタイプlogger.isDebugEnabled()の警備員を使用していない限り、デバッグ文の多くはパフォーマンスに影響を与える可能性があるため、最悪です。

もしあなたがそれを買う余裕があれば、私はslf4jLogbackに基本的な実装として切り替えることをお勧めします。 Logbackの主な焦点はスピードです。他のロギングシステムより速いことを確認するためには、かなりの時間がかかるようです。

+0

もう1つのログフレームワーク* slf4j *の存在を知らせてくれてありがとう。だから、slf4jはlog4jに取って代わられていますか? – Gnanam

+1

@ギャナン:[私の答え](http://stackoverflow.com/questions/4311086/any-reason-for-a-new-project-to-use-log4j-instead-of-logback)を見てください。 Slf4jはAPIであり、Logbackを実装として使用できます。ボーナスポイント:必要に応じて、log4jを実装として使用することもできます。 Logbackはlog4jに取って代わり、log4jを作ったのと同じ人が作ったものです。 – darioo

0

ローリングファイルアペンダーがConsoleAppenderよりも遅くなる必要はないとは思いません。それは、各ログステートメントの回転をチェックする必要はありません、それはタイマーのスレッドを使用することができます。 ConsoleAppenderは、コンソールに書き込む必要があるすべてのものによって制限されるため、スレッドが順番を待っているときに競合が発生する可能性があります。

(明確にするために、私はConsoleAppenderをアサートないよと、それが高速ですオプション当然の結論ではないだけという、確かに遅いです。)

のlog4j DailyRollingFileAppenderはits api docsに応じていくつかの問題を持っているようです。 javadocでは、

DailyRollingFileAppenderが同期の問題とデータの消失を示すことが確認されています。

アラームの原因のように聞こえます。明らかに、ローリングファイルアペンダーの改良バージョンがextras section of the Log4j siteの下にあります。

+0

'log4j DailyRollingFileAppenderにはapi docsによるといくつかの問題があるようです - 私はそういう行を見つけることができませんでした。あなたは私を特定のセクションに向けることができますか? – Gnanam

+0

なぜあなたは 'The ConsoleAppenderはコンソールに書き込むすべてのものによって制限されているのですか?あなたの意見でそれが何を制限しているのか分かち合うことができますか? – Gnanam

+0

@ Gnanam:PrintStreamメソッドは同期され、一度に1つのスレッドだけがストリームに書き込むことができます。 –