SQL Server データベースに書き込みを行う log4net ado アペンダーがあります。私はそれが好きです、私はそれがきちんとしていると思います。本番環境に送る前に、データベースがダウンした場合の動作を知りたいです。
ログ データベースが使用できないため、アプリケーションを停止したくありません。log4net は黙って失敗し、何もしないと思いますが、少なくともそれは私が望んでいることです。誰でもこれを確認できますか、または(より良い)これを確認するドキュメントを教えてもらえますか?
SQL Server データベースに書き込みを行う log4net ado アペンダーがあります。私はそれが好きです、私はそれがきちんとしていると思います。本番環境に送る前に、データベースがダウンした場合の動作を知りたいです。
ログ データベースが使用できないため、アプリケーションを停止したくありません。log4net は黙って失敗し、何もしないと思いますが、少なくともそれは私が望んでいることです。誰でもこれを確認できますか、または(より良い)これを確認するドキュメントを教えてもらえますか?
アペンダー (私が認識しているすべての log4net アペンダーと同様) は黙って失敗し、ログを停止します。ただし、再接続を試みるようにアペンダーを構成できます。
<reconnectonerror value="True" />
その場合、おそらくデータベース接続文字列で接続タイムアウトを指定する必要があります。
Connect Timeout=1
そうしないと、データベースがオフラインの場合にアプリケーションが非常に遅くなります。
.Net 4.5.1 以降の場合はConnectRetryCount=0;
、接続文字列も設定する必要があります。
アペンダー構成:
<ReconnectOnError value="true" />
<connectionString value="...Connect Timeout=1;ConnectRetryCount=0;" />
Log4Net.Async のような非同期ロギングを行う場合、接続タイムアウトはデフォルトの 15 秒のままにすることができます。
詳細
.Net 4.5.1 は ADO.NET 接続の復元力を追加します。これにより、接続が開いていなくても接続が開いていることを Log4Net に伝え、ConnectRetryCount を使用して再接続を試みます。ただし、Log4Net に再接続を行わせたいため、ConnectRetryCount の最大値は 255 であるため、ConnectRetryCount を 0 に設定する必要があります 。 .microsoft.com/dotnet/2013/06/26/announce-the-net-framework-4-5-1-preview/
reconnectonerrorを使用すると、DB サーバーが使用可能になった時点で確実にログを再開できますが、サーバーがダウンしている間の中間ログ メッセージは失われます。log4Net には、DB サーバーが利用可能な状態でメッセージを永続化するための準備がないと思います。