【问题标题】:log4net Adonet Appender Connection Issuelog4net Adonet Appender 连接问题
【发布时间】:2012-11-29 10:53:12
【问题描述】:

我开发了一个 Windows 服务,我在其中使用计时器控件来执行一些计划任务。计时器超时事件每 5 分钟发生一次,其中使用 log4net appender 将日志条目添加到 Oracle 数据库。

在数据库服务器关闭所有连接以进行夜间冷备份之前,一切正常。从那时起,DB 中的所有日志都将丢失,除非重新启动服务,否则不会记录任何内容,即使备份过程花费的时间不到 30 分钟。

从其他帖子中,我发现 log4net 仅使用一个连接,如果丢失,则所有后续日志都将被丢弃。为了解决这个问题,我开始使用在其配置中设置为 true 的 ReconnectOnError 属性。但不幸的是,问题仍然存在。备份后日志仍然丢失。我启用了跟踪并发现以下错误,但我不知道如何解决此问题。

log4net:ERROR [CustomAdoNetAppender] 写入数据库时​​出现异常 Oracle.DataAccess.Client.OracleException ORA-03113:Oracle.DataAccess.Client.OracleException.HandleErrorHelper(Int32 errCode,OracleConnection conn,IntPtr opsErrCtx,OpoSqlValCtx* pOpoSqlValCtx,Object src,String 过程)的通信通道上的文件结尾 在 Oracle.DataAccess.Client.OracleException.HandleError(Int32 errCode,OracleConnection conn,字符串过程,IntPtr opsErrCtx,OpoSqlValCtx* pOpoSqlValCtx,对象 src) 在 Oracle.DataAccess.Client.OracleCommand.ExecuteNonQuery() 在 log4net.Appender.AdoNetAppender.SendBuffer(IDbTransaction dbTran,LoggingEvent[] 事件) 在 log4net.Appender.AdoNetAppender.SendBuffer(LoggingEvent[] 事件)

和:

log4net:ERROR [CustomAdoNetAppender] 写入数据库时​​出现异常 System.InvalidOperationException:连接已经是本地或分布式事务的一部分 在 Oracle.DataAccess.Client.OracleConnection.BeginTransaction(IsolationLevel 隔离级别) 在 Oracle.DataAccess.Client.OracleConnection.BeginDbTransaction(IsolationLevel 隔离级别) 在 System.Data.Common.DbConnection.System.Data.IDbConnection.BeginTransaction() 在 log4net.Appender.AdoNetAppender.SendBuffer(LoggingEvent[] 事件)

对此高度赞赏!

【问题讨论】:

    标签: c# windows-services log4net


    【解决方案1】:

    我个人认为这是 log4net AdoNetAppender 中的一个错误。

    在 log4net 1.2.11 中,AdoNetAppender 犯下了保持开放连接而不是使用连接池的主要罪行。

    ReconnectOnError 选项看起来也坏了:它只在当前连接状态不是ConnectionState.Open 时才尝试重新连接,这似乎是错误的:我不相信出现错误时连接状态会改变(枚举值ConnectionState.Broken 在 MSDN 中记录为为产品的未来版本保留)。

    总而言之,我建议您实现自己的自定义附加程序,以正确执行连接池。这不是一个很大的类,所以很容易复制和修复。

    【讨论】:

    • 感谢您的回复。是否可以在某处或自定义 Appender 中捕获 log4net 异常?
    猜你喜欢
    • 2011-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多