1

我们有许多使用 log4net 记录到 sql server 数据库的 .NET 应用程序。由于各种原因(与 log4net 无关......我认为)有时记录会停止。应用程序可能会继续工作,但在回收 IIS 应用程序池之前不会继续记录。显而易见的解决方案是将 reconnectonerror 添加到 log4net 附加程序。但是,据我了解,始终建议将“connect timeout=1”添加到附加的连接字符串中。为什么?

我的意思是...

如果 log4net 日志在没有“连接超时 = 1”的情况下工作,为什么包括添加“连接超时 = 1”很重要?

4

1 回答 1

2

根据文档,重新连接的行为可能会阻塞调用线程。

更具体地说,如果连接不可用,一旦有足够的消息用于批处理,Log4Net 将尝试重新连接。如果数据库存在长期问题,这可能会导致性能下降——尤其是在您配置了大量日志记录或小批量大小的情况下。

Apache 的设计目标之一是允许日志语句保留在生产代码中,而不会产生高性能成本。这就是连接超时建议的来源。如果您必须支付重新连接的费用,请至少使其快速,以免对性能造成太大影响。

来源: http: //logging.apache.org/log4net/release/sdk/log4net.Appender.AdoNetAppender.ReconnectOnError.html

http://mail-archives.apache.org/mod_mbox/logging-log4net-user/200506.mbox/%3CDDEB64C8619AC64DBC074208B046611C7692DA@kronos.neoworks.co.uk%3E

于 2014-04-22T21:22:19.200 回答