1

マルチスレッド アプリケーションで log4cxx のようなロギング フレームワークを使用したいと考えています。

ログをファイルに出力する場合は、メッセージを正しくシリアル化する必要があります。私は、これらのフレームワークが何らかの同期オブジェクトを使用せずに出力の正しいシリアル化を取得する方法 (およびその場合) を自問していました。

同期オブジェクトを使用している場合(たとえば、キュ​​ーにアクセスしてメッセージをログに記録する場合)、関連するスレッドの動作が変化する可能性があるため、ログに記録されたアプリケーション全体の動作(およびバグ...)も変化する可能性があると思います.

4

1 に答える 1

2

log4cxx は、他の log4XXX フレームワークと同様に、実際に同期されています。同期はアペンダーで行われ、ログ エントリの内容が混在しないことを保証するために必要です。これによってスレッドの動作が変わることはありませんが、スレッドのパフォーマンスがわずかに低下します。ファイルにログを記録するときの I/O のパフォーマンス ヒットと比較して、パフォーマンス ヒットは小さいです。

それでもパフォーマンスが心配な場合は、非同期ログの使用を検討できます (別のスレッドでログを処理するAsyncAppenderを使用)。非同期アプローチを使用すると、メッセージがログに記録されることを保証できません (たとえば、ログ スレッドがメッセージを処理する前にアプリケーションがクラッシュした場合)。 ) パフォーマンスを改善する最も簡単な方法は、ログの量を減らすことです。

于 2013-05-14T13:40:10.950 に答える