Можете ли вы потянуть connectionString для log4net AdoNetAppender из другого места в файле web.config?
У меня уже есть строка подключения db в моем файле web.config. Я просмотрел документы log4net, но не могу найти способ использовать его в разделе log4net моего файла web.config. Возможно ли сделать что-то подобное?
<connectionStrings>
<add name="connStr" connectionString="Data Source=localhost; ..." />
</connectionStrings>
<log4net>
<appender name="AdoNetAppender" type="log4net.Appender.AdoNetAppender">
<connectionString connectionStringName="connStr"/>
...
</log4net>
Ответы
Ответ 1
Создайте класс, который расширяет AdoNetAppender
- скажем, WebAppAdoNetAppender
. Внесите свойство ConnectionString
в этот класс и извлеките строку подключения из вашего файла web.config в этом устройстве свойств.
<log4net>
<appender name="AdoNetAppender" type="MyApp.WebAppAdoNetAppender">
...
...
public class WebAppAdoNetAppender : log4net.Appender.AdoNetAppender
{
public new string ConnectionString
{
get { return base.ConnectionString; }
set { base.ConnectionString = ... }
}
}
Ответ 2
Можно использовать строку соединения DB, указанную в web.config, без создания нового класса, хотя вам нужно будет использовать сборку log4net, которая еще не была выпущена. Его можно загрузить из репозитория SVN http://svn.apache.org/viewvc/logging/log4net/trunk/
Ваша конфигурация будет выглядеть следующим образом:
<connectionStrings>
<add name="connStr" connectionString="Data Source=localhost; ..." />
</connectionStrings>
<log4net>
<appender name="AdoNetAppender" type="log4net.Appender.AdoNetAppender">
<connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<connectionStringName value="connStr" />
...
</log4net>
Обратите внимание, что connectionType
еще нужно указать.
Ответ 3
fyi это будет реализовано в 1.2.11 согласно this. однако я понятия не имею, когда они собираются выпустить его.
Ответ 4
ответы, прежде всего, не работают. Я получил другое решение для этого, я попробовал, и он сработал:
private static void ConfigureLog4Net()
{
Hierarchy hierarchy = LogManager.GetRepository() as Hierarchy;
if(hierarchy != null && hierarchy.Configured)
{
foreach(IAppender appender in hierarchy.GetAppenders())
{
if(appender is AdoNetAppender)
{
var adoNetAppender = (AdoNetAppender)appender;
adoNetAppender.ConnectionString = ConfigurationManager.AppSettings["YOURCONNECTIONSTRINGKEY"].ToString();
adoNetAppender.ActivateOptions(); //Refresh AdoNetAppenders Settings
}
}
}
}
Как я могу использовать connectionString текущего сайта для log4Net вместо настройки
Ответ 5
Начиная с 2017 года (log4net 2.0.8.0
), работает следующее:
public class MyAdoNetAppender : AdoNetAppender
{
public MyAdoNetAppender()
{
ConnectionString = ...
}
}
<appender name="AdoNetAppender" type="MyApp.MyAdoNetAppender">
(Очень похоже на ответ @Michael Petrotta)