繁体   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