1

SQL Server データベースへのログ記録に log4net を使用する .NET アプリケーションが多数あります。さまざまな理由で (log4net とは関係ありません...と思います)、ログが停止することがあります。アプリケーションは引き続き動作する可能性がありますが、IIS アプリケーション プールがリサイクルされるまでログは継続されません。明らかな解決策は、log4net アペンダーに reconnectonerror を追加することです。ただし、私が理解しているように、追加された接続文字列に「接続タイムアウト = 1」を追加することが常に提案されています。なんで?

私が言いたいのは...

「接続タイムアウト= 1」なしでlog4netロギングが機能した場合、「接続タイムアウト= 1」を追加することを含めるのはなぜですか?

4

1 に答える 1

2

ドキュメントによると、再接続の行為は呼び出し元のスレッドをブロックする可能性があります。

より具体的には、接続が利用できない場合、Log4Net は、バッチに十分なメッセージがあると再接続を試みます。データベースに慢性的な問題がある場合、パフォーマンスが低下する可能性があります。特に、多数のロギングや小さなバッチ サイズを構成している場合はそうです。

Apache の設計目標の 1 つは、高いパフォーマンス コストを発生させることなく、ログ ステートメントを運用コードに残すことです。これが、接続タイムアウトの提案の由来です。再接続のコストを支払わなければならない場合は、パフォーマンスに大きな影響を与えないように、少なくとも再接続を迅速に行ってください。

ソース: http://logging.apache.org/log4net/release/sdk/log4net.Appender.AdoNetAppender.ReconnectOnError.html

http://mail-archives.apache.org/mod_mbox/logging-log4net-user/200506.mbox/%3CDDEB64C8619AC64DBC074208B046611C7692DA@kronos.neoworks.co.uk%3E

于 2014-04-22T21:22:19.200 に答える