[英]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.