У меня есть log4net, настроенный для записи в базу данных. Мой журнал конфигурации выглядит примерно так:Force log4net для повторного подключения к SQL-соединению
<?xml version="1.0" encoding="utf-8" ?>
<log4net>
<root>
<appender-ref ref="SqlAppenderAll" />
<level value="DEBUG" />
</root>
<appender name="SqlAppenderAll" type="log4net.Appender.ADONetAppender">
<connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<connectionStringName value="MyConnectionString" />
...
</appender>
</log4net>
Проблема заключается в том, что MyConnectionString недоступен сразу. Ряд элементов конфигурации для службы хранятся в базе данных конфигурации и извлекаются при запуске службы. Это позволяет настраивать строки соединения один раз для всей системы, а не для каждой службы отдельно.
Так при запуске службы, он делает что-то вроде этого:
var myConnectionString = ConfigProvider.GetConnectionString("MyConnectionString");
AddConnectionString(myConnectionString, "web.config");
Это вызывает log4net игнорировать SQL Appender, потому что строка соединения не доступна при инициализации.
log4net:ERROR [AdoNetAppender] ErrorCode: GenericFailure. Could not open database connection []. Connection string context [Unable to determine connection string context.].
log4net.Core.LogException: Unable to find [MyConnectionString] ConfigurationManager.ConnectionStrings item
at log4net.Appender.AdoNetAppender.ResolveConnectionString(String& connectionStringContext)
at log4net.Appender.AdoNetAppender.InitializeDatabaseConnection()
Любые последующие вызовы log.Info/Debug/etc никогда не записываются.
Есть ли способ заставить log4net повторить соединение после добавления строки подключения к web.config. Кроме того, существует ли способ отложить процесс инициализации log4net?
Журналирование настроено таким образом, с watch = true. Проблема в том, что изменения не происходят в файле ведения журнала, это в файле web.config (и даже тогда, только в памяти, а не в самом файле). Файл регистрации ссылается только на строку подключения по имени. Поэтому, когда строка подключения добавляется, она, похоже, не подхвачена log4net. – ConditionRacer
@ConditionRacer - Проверьте обновление и посмотрите, будет ли это работать. –
Работает! Большое спасибо – ConditionRacer