2012-11-29 22 views
7

私はいくつかのスケジュールされたタスクを実行するためにタイマーコントロールを使用しているWindowsサービスを開発しました。 timer elapseイベントは5分ごとに発生し、log4net appenderを使用してOracleデータベースにログエントリが作成されます。log4net Adonet Appender接続の問題

DBサーバーが夜間のコールドバックアップのすべての接続を閉じるまで、すべて正常に動作します。それ以来、バックアップ処理に30分以下かかる場合でも、サービスが再起動されない限り、DB内のすべてのログは失われ、何も記録されません。

他の投稿から、私はlog4netが1つの接続しか使用しないことが分かりました。もし紛失した場合、その後のすべてのログは破棄されます。これを解決するために、設定でReconnectOnError属性をtrueに設定して使用を開始しました。しかし残念ながら、この問題はまだ残っています。バックアップ後もログは失われています。トレースを有効にしてエラーが検出されましたが、この問題の解決方法はわかりません。

log4netの:ERROR [CustomAdoNetAppender】例外データベース Oracle.DataAccess.Client.OracleException ORA-03113への書き込み中:エンドオブファイル通信チャネル上Oracle.DataAccess.Client.OracleException.HandleErrorHelperで(のInt32 ERRCODE 、Oracle.DataAccess.Client.OracleException.HandleError(のInt32 ERRCODE、OracleConnectionのCONN、文字列手順のIntPtr opsErrCtx、OpoSqlValCtx * pOpoSqlValCtx、オブジェクトSRC)でのOracleConnection CONN、のIntPtr opsErrCtx、OpoSqlValCtx * pOpoSqlValCtx、オブジェクトSRC、文字列手順) でOracle.DataAccess.Client.OracleCommand.ExecuteNonQuery()at log4net.Appender.AdoNetAppender.SendBuffer(IDbTransaction dbTran、LoggingEvent [] events)log4net.Appender.AdoNetAppender.SendBufferで210(LoggingEventな[]イベント)

と:

log4netの:ERROR [CustomAdoNetAppender]例外データベースへの書き込み中に のSystem.InvalidOperationException:接続が既にの一部でありますローカルまたは分散トランザクション (Oracle.DataAccess.Client.OracleConnection.BeginTransaction(IsolationLevel isolationLevel)) (Oracle.DataAccess.Client.OracleConnection.BeginDbTransaction(IsolationLevel isolationLevel)) at System.Data.Common.DbConnection.System.Data IDbConnection.BeginT ransaction()log4net.Appender.AdoNetAppender.SendBuffer(LoggingEventな[]イベント)

で高く評価この上の任意のヘルプ!

答えて

3

私はこれをlog4net AdoNetAppenderのバグと個人的に考えています。

log4netで1.2.11 AdoNetAppenderは、接続プーリングを使用するのではなく、オープン接続を維持するという基本的な罪を犯します。

またReconnectOnErrorオプションが壊れなります。現在の接続状態が間違っているようである、ConnectionState.Openない場合はそれだけで再接続しようとします。エラー(列挙型の値があったとき、私はその接続状態の変更を考えていないConnectionState.Broken MSDNには、製品の将来のバージョン用に予約されていると記載されています)。

すべての場合、正しく接続プールを行う独自のカスタムアペンダーを実装することをおすすめします。非常に大きなクラスではないので、複製して修正するのが簡単です。

+0

返信いただきありがとうございます。 log4netの例外をどこかカスタムアペンダーで捕捉することは可能ですか? – Lucky