log4net到SQLServer:如果数据库不可用会发生什么?

时间:2010-09-23 13:24:07

标签: log4net adonetappender

我有一个写入SQL Server数据库的log4net ado appender。我喜欢它,我觉得它很整洁。在我将其发送到生产环境之前,我想知道如果数据库发生故障会导致什么行为。

我不希望应用程序停止,因为日志记录数据库不可用。我假设log4net会默默地失败并且什么都不做,至少那是我所希望的。任何人都可以证实这一点,或者(更好)指出一些可以证实这一点的文件吗?

3 个答案:

答案 0 :(得分:13)

appender(就像我所知道的所有log4net appender一样)将无声地失败,从而停止记录。您可以配置appender尝试重新连接:

<reconnectonerror value="True" />

在这种情况下,您可能希望在数据库连接字符串中指定连接超时:

Connect Timeout=1

如果您不这样做,如果数据库脱机,您的应用程序将非常慢。

答案 1 :(得分:6)

如果在.Net 4.5.1或更高版本中,您还必须在连接字符串中设置ConnectRetryCount=0;

Appender配置:

<ReconnectOnError value="true" />
<connectionString value="...Connect Timeout=1;ConnectRetryCount=0;" />

如果你像Log4Net.Async那样执行异步记录,那么Connect Timeout可能会默认保留15秒。

<强>详情

.Net 4.5.1增加了ADO.NET连接弹性,告诉Log4Net连接仍然打开,即使它不是,并尝试使用ConnectRetryCount重新连接。但是,由于我们希望让Log4Net重新连接并且ConnectRetryCount的最大值为255,因此我们应将ConnectRetryCount设置为0.来源:https://issues.apache.org/jira/browse/LOG4NET-442 https://blogs.msdn.microsoft.com/dotnet/2013/06/26/announcing-the-net-framework-4-5-1-preview/

答案 2 :(得分:0)

使用 reconnectonerror 肯定会让您在数据库服务器可用后再次开始记录,但在服务器关闭时,中间日志消息将丢失。我认为log4Net没有任何规定来保留数据库服务器可用的消息。