Luc*_*cky 7 c# log4net windows-services
我开发了一个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.Broken
在 MSDN 中记录为为产品的未来版本保留)。
总而言之,我建议您实现自己的自定义附加程序,以正确执行连接池。这不是一个很大的类,因此很容易复制和修复。
归档时间: |
|
查看次数: |
1344 次 |
最近记录: |