Можете ли вы извлечь строку подключения для AdoNetAppender log4net из другого места в файле web.config? - PullRequest
42 голосов
/ 14 марта 2010

У меня уже есть строка подключения БД в моем файле 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>

Ответы [ 5 ]

47 голосов
/ 22 февраля 2011

Можно использовать строку подключения к БД, указанную в 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 еще нужно указать.

32 голосов
/ 14 марта 2010

Создайте класс, который расширяет 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 = ...   }
    }
}
5 голосов
/ 14 марта 2010

FYI это будет реализовано в 1.2.11 в соответствии с это . однако я понятия не имею, когда они собираются выпустить его.

4 голосов
/ 31 марта 2012

ответы выше всего не работают.я получил другое решение для этого, я попытался, и это сработало:

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 вместо настройки

0 голосов
/ 28 ноября 2017

По состоянию на 2017 год (log4net 2.0.8.0) работают:

public class MyAdoNetAppender : AdoNetAppender
{
    public MyAdoNetAppender()
    {
        ConnectionString = ...
    }
}


<appender name="AdoNetAppender" type="MyApp.MyAdoNetAppender">

(Очень похоже на ответ @Michael Petrotta)

...