9

SQL Server データベースに書き込みを行う log4net ado アペンダーがあります。私はそれが好きです、私はそれがきちんとしていると思います。本番環境に送る前に、データベースがダウンした場合の動作を知りたいです。

ログ データベースが使用できないため、アプリケーションを停止したくありません。log4net は黙って失敗し、何もしないと思いますが、少なくともそれは私が望んでいることです。誰でもこれを確認できますか、または(より良い)これを確認するドキュメントを教えてもらえますか?

4

3 に答える 3

14

アペンダー (私が認識しているすべての log4net アペンダーと同様) は黙って失敗し、ログを停止します。ただし、再接続を試みるようにアペンダーを構成できます。

<reconnectonerror value="True" />

その場合、おそらくデータベース接続文字列で接続タイムアウトを指定する必要があります。

Connect Timeout=1

そうしないと、データベースがオフラインの場合にアプリケーションが非常に遅くなります。

于 2010-09-23T13:33:06.770 に答える
7

.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/

于 2016-07-12T15:54:46.983 に答える
0

reconnectonerrorを使用すると、DB サーバーが使用可能になった時点で確実にログを再開できますが、サーバーがダウンしている間の中間ログ メッセージは失われます。log4Net には、DB サーバーが利用可能な状態でメッセージを永続化するための準備がないと思います。

于 2015-12-17T05:31:15.437 に答える