我们有许多.NET应用程序使用log4net登录到sql server databsae。出于各种原因(与log4net无关......我认为)有时候记录停止。应用程序可能会继续工作,但在IIS应用程序池被回收之前,日志记录将不会继续。显而易见的解决方案是将reconnectonerror添加到log4net appender。但是,据我所知,始终建议将“connect timeout = 1”添加到附加的连接字符串中。为什么呢?
我的意思是......
如果log4net日志记录在没有“connect timeout = 1”的情况下工作,为什么会包含make add“connect timeout = 1”?
答案 0 :(得分:2)
根据文档,重新连接的行为可能会阻止调用线程。
更具体地说,如果连接不可用,一旦有足够的批处理消息,Log4Net将尝试重新连接。如果数据库存在长期问题,则可能导致性能下降 - 尤其是在配置了大量日志记录或小批量大小的情况下。
Apache的一个设计目标是允许日志语句保留在生产代码中,而不会产生高性能成本。这就是连接超时建议的来源。如果你需要支付重新连接的费用,至少要快速完成,这样你就不会受到太大的性能损失。
资料来源: http://logging.apache.org/log4net/release/sdk/log4net.Appender.AdoNetAppender.ReconnectOnError.html