log4net to sqlserver:データベースが利用できない場合はどうなりますか?
-
04-10-2019 - |
質問
SQL ServerデータベースにLog4Net Ado Appenderを書き込みました。私はそれが好きです、私はそれがきちんとしていると思います。生産に送信する前に、データベースがダウンした場合に動作がどうなるかを知りたいです。
ロギングデータベースが利用できないため、アプリケーションを停止したくありません。 log4netは静かに失敗し、何もしないと推測しています。少なくともそれは私が望んでいることです。誰もがこれを確認できますか、それとも(より良い)これを確認するいくつかのドキュメントを教えてもらえますか?
解決
Appender(私が知っているすべてのlog4net付属品と同様)は、静かに失敗し、したがってロギングを停止します。ただし、再接続を試みるようにAppenderを構成できます。
<reconnectonerror value="True" />
その場合、DB接続文字列で接続時間を指定する必要があります。
Connect Timeout=1
そうしないと、DBがオフラインである場合、アプリケーションは非常に遅くなります。
他のヒント
.NET 4.5.1以降に設定する必要がある場合 ConnectRetryCount=0;
接続文字列に。
Appender Configuration:
<ReconnectOnError value="true" />
<connectionString value="...Connect Timeout=1;ConnectRetryCount=0;" />
log4net.asyncのような非同期ロギングを行うと、接続タイムアウトはデフォルトの15秒のままになる場合があります。
詳細
.NET 4.5.1は、ADO.NET接続の弾力性を追加します。これは、ConnectRetryCountを使用して再接続しようとしていても、接続がまだ開いていることをlog4netに伝えることを示します。ただし、log4netに再接続を実行させたいので、ConnectRetryCountの最大255があります。ConnectRetryCountを0に設定する必要があります。 https://issues.apache.org/jira/browse/log4net-442 https://blogs.msdn.microsoft.com/dotnet/2013/06/26/Announcing-the-net-framework-4-5-1-preview/
使用 Reconnectonerror DBサーバーが利用可能になったら、再びログを開始できるようになりますが、サーバーがダウンしている間に中間ログメッセージが紛失します。 log4netには、DBサーバーが利用可能になったメッセージを持続するための規定がないと思います。