Подтвердить что ты не робот

Как я могу использовать connectionString текущего сайта для log4Net вместо настройки

Я использую log4Net для своего системного журнала. ConnectionString node является обязательным, если тип приложения - AdoNetAppender в Log4Net. Тем не менее, у меня уже есть connectionString на моем сайте, где я использую Log4Net.

Как я могу использовать connStr сайта для log4Net вместо того, чтобы снова настроить тот же самый connstr в файле конфигурации log4net?

4b9b3361

Ответ 1

Это довольно просто, вам просто нужно заменить конфигурацию appender connectionString.

Вместо строки подключения:

<connectionString value="[Complete Connection]" />

Вы просто используете конфигурацию connectionStringName:

<connectionStringName value="ApplicationConnection" />

И затем у вас есть строка подключения к вашему приложению:

 <connectionStrings>
     <add name="ApplicationConnection" connectionString="Connection" providerName="System.Data.OracleClient" />
 </connectionStrings>

К сожалению, вы должны иметь connectionType с именем connectionStringName, например:

<appender name="AdoNetAppender_Oracle" type="log4net.Appender.AdoNetAppender">
    <connectionType value="System.Data.OracleClient.OracleConnection, System.Data.OracleClient, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
    <connectionStringName value="ApplicationConnection" />
...

Ответ 2

Вы можете динамически обновлять ConnectionString из AdoNetAppender, после того, как вы настроили log4net для своего сайта, как правило, в Global.asax. После вашего вызова для настройки log4net с помощью XmlConfigutor() или что-то еще.. вы можете вызвать метод ниже, который проверяет все AdoNetAppenders и обновляет требуемую connectionString.

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
           }
        }
    }
}

Ответ 3

Теперь вы можете использовать свойство ConnectionStringName для AdoNetAppender, указывая его на имя namedString в вашем приложении или файле web.config:

Свойство AdoNetAppender.ConnectionStringName

Ответ 4

Вы можете сделать это, написав пользовательский ADO.NET-приложение и переопределив строку подключения:

public new string ConnectionString {
    get { 
        return base.ConnectionString; 
    }

    //you could set your own connection string here
    set { 
        base.ConnectionString = ConfigurationManager.ConnectionStrings ["Sql"].
            ConnectionString; 
    }
}

Вы можете посетить http://technico.qnownow.com/2012/03/12/how-to-write-custom-ado-net-appender-for-log4net/ для полного примера

Ответ 5

Вы можете сделать это, наследуя AdoNetAppender.

  • 1) Создайте класс, который наследуется от AdoNetAppender.
  • 2) Затем создайте свойство ConnectionStringName, которое установит свойство Log4Net ConnectionString в строку соединения, которая извлекается .NET ConfigurationManager.
  • 3) Создайте запись ConnectionStringName в разделе AdoNetAppender вашего конфигурационного файла, который сопоставляется с существующей connectionString в разделе connectionStrings вашего файла конфигурации.

Подробнее см. ниже в блоге "Ken Burkhardt".

http://kenny-bu.blogspot.com/2011/03/using-connection-string-name-with.html