我们有许多.NET应用程序,可以使用Log4net来记录到SQL Server数据库。出于各种原因(与log4net ...我认为)有时停止。该应用程序可能会继续工作,但是在回收IIS应用程序池之前,记录将不会继续进行。显而易见的解决方案是将ReconnectonError添加到Log4net Appender。但是,据我了解,总是建议将"连接超时= 1"添加到附加的连接字符串中。为什么?
我的意思是...
如果log4nnet日志记录在没有"连接timeout = 1"的情况下工作了,为什么包括添加"连接timeout = 1"物质?
根据文档,重新连接的行为可能会阻止调用线程。
更具体地说,如果没有连接,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/<DDEB64C8619AC64DBC074208B04208B04666611C7692DA@KROOS.NOWEOWEOWEOWEOWEOWOROS.NEOWOROS.NEOWORKS.CO.NOWEOWCOS.CO.UKPECT>