簡體   English   中英

log4net Adonet Appender連接問題

[英]log4net Adonet Appender Connection Issue

我開發了一個Windows服務,我在其中使用計時器控件來執行一些計划任務。 計時器過去事件每5分鍾發生一次,其中使用log4net appender向Oracle數據庫創建日志條目。

一切正常,直到DB Server關閉所有連接進行夜間冷備份。 從那時起,所有DB中的日志都會丟失,除非服務重新啟動,否則不會記錄任何日志,即使備份過程不到30分鍾。

從其他帖子我發現log4net只使用一個連接,如果丟失,則丟棄所有后續日志。 為了解決這個問題,我開始在其配置中使用ReconnectOnError屬性設置為true。 但不幸的是,問題仍然存在。 備份后日志仍然缺失。 我啟用了跟蹤並發現了以下錯誤,但我不知道如何解決此問題。

log4net:ERROR [CustomAdoNetAppender]寫入數據庫時​​出現異常Oracle.DataAccess.Client.OracleException ORA-03113:Oracle.DataAccess.Client.OracleException.HandleErrorHelper(Int32 errCode,OracleConnection conn,IntPtr opsErrCtx,通信通道)上的文件結束Oracle.DataAccess.Client.OracleCommand.ExecuteNonQuery上的Oracle.DataAccess.Client.OracleException.HandleError(Int32 errCode,OracleConnection conn,String procedure,IntPtr opsErrCtx,OpoSqlValCtx * pOpoSqlValCtx,Object src)中的OpoSqlValCtx * pOpoSqlValCtx,Object src,String procedure) ()at log4net.Appender.AdoNetAppender.SendBuffer(IDbTransaction dbTran,LoggingEvent [] events)at log4net.Appender.AdoNetAppender.SendBuffer(LoggingEvent [] events)

和:

log4net:ERROR [CustomAdoNetAppender]寫入數據庫時​​出現異常System.InvalidOperationException:Connection已經是Oracle.DataAccess.Client.OracleConnection.BeginDbTransaction上Oracle.DataAccess.Client.OracleConnection.BeginTransaction(IsolationLevel isolationLevel)的本地或分布式事務的一部分。 (IsolationLevel isolationLevel)位於log4net.Appender.AdoNetAppender.SendBuffer(LoggingEvent []事件)的System.Data.Common.DbConnection.System.Data.IDbConnection.BeginTransaction()處

任何幫助都非常感謝!!

我個人認為這是log4net AdoNetAppender中的一個錯誤。

在log4net 1.2.11中, AdoNetAppender承諾保持開放連接而不是使用連接池。

另外ReconnectOnError選項看起來壞了:如果當前連接狀態不是ConnectionState.Open ,它只會嘗試重新ConnectionState.Open ,這似乎是錯誤的:我不相信連接狀態在出現錯誤時會改變(枚舉值ConnectionState.Broken在MSDN中記錄為保留用於產品的未來版本)。

總而言之,我建議您實現自己的自定義appender,以正確連接池。 它不是一個非常大的類,所以很容易復制和修復。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM