log4net для SQLServer: что произойдет, если база данных недоступна? - PullRequest
8 голосов
/ 23 сентября 2010

У меня log4net ado appender, пишущий в базу данных SQL Server.Мне нравится это, я думаю, что это опрятно.Прежде чем отправить его в производство, я хочу знать, как будет работать база данных.

Я не хочу, чтобы приложение останавливалось, потому что база данных журналов недоступна.Я предполагаю, что log4net просто молча потерпит неудачу и ничего не сделает, по крайней мере, это то, на что я надеюсь.Кто-нибудь может подтвердить это или (лучше) указать мне какую-нибудь документацию, которая это подтвердит?

Ответы [ 3 ]

13 голосов
/ 23 сентября 2010

Приложение (как и все известные мне приложения log4net) автоматически завершит сбои и, таким образом, прекратит запись в журнал. Вы можете настроить приложение, чтобы попытаться восстановить соединение:

<reconnectonerror value="True" />

В этом случае вы, вероятно, захотите указать время ожидания соединения в строке соединения с БД:

Connect Timeout=1

Если вы этого не сделаете, ваше приложение будет очень медленным, если БД не в сети.

6 голосов
/ 12 июля 2016

Если в .Net 4.5.1 или более поздней версии вам также нужно будет установить ConnectRetryCount=0; в строке подключения.

Конфигурация приложения:

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

Если вы ведете асинхронное ведение журнала, например, Log4Net.Async, то время ожидания соединения может остаться по умолчанию на 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/

0 голосов
/ 17 декабря 2015

при использовании reconnectonerror , безусловно, позволит вам снова начать регистрацию, как только сервер БД будет доступен, но промежуточные сообщения журнала, пока сервер не работает, будут потеряны. Я думаю, что log4Net не имеет никаких средств для сохранения сообщений при использовании сервера БД.

...