web-dev-qa-db-de.com

Wie kann ich den connectionString der aktuellen Website für log4Net verwenden, anstatt zu konfigurieren?

Ich verwende log4Net für das Protokoll meines Systems. Der connectionString-Knoten ist obligatorisch, wenn der Appender-Typ der AdoNetAppender in Log4Net ist. Ich habe jedoch bereits einen connectionString auf meiner Website, auf dem ich Log4Net verwende. 

Wie kann ich den connStr der Website für log4Net verwenden, anstatt ihn erneut in der log4net-Konfigurationsdatei zu konfigurieren?

27
Aiping He

Es ist ziemlich einfach, Sie müssen nur die Konfiguration des Appenders connectionString ersetzen.

Anstelle der Verbindungszeichenfolge:

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

Sie verwenden einfach die connectionStringName Konfiguration:

<connectionStringName value="ApplicationConnection" />

Und dann haben Sie Ihre Anwendungsverbindungszeichenfolge:

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

Leider müssen Sie die connectionType mit connectionStringName haben, Beispiel:

<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" />
...
37

Sie können ConnectionString von AdoNetAppender dynamisch aktualisieren, nachdem Sie log4net für Ihre Website konfiguriert haben, normalerweise in der Datei "Global.asax". Nach Ihrem Aufruf zum Konfigurieren des log4net mit XmlConfigutor() oder so etwas .. können Sie die Methode unten aufrufen, die alle AdoNetAppender prüft und den erforderlichen connectionString aktualisiert.

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
           }
        }
    }
}
17
Narayan Akhade

Sie können nun die ConnectionStringName-Eigenschaft des AdoNetAppender verwenden, indem Sie auf einen benannten ConnectionString in Ihrer App- oder web.config-Datei verweisen:

AdoNetAppender.ConnectionStringName-Eigenschaft

7
David Sette

Sie können dies tun, indem Sie einen benutzerdefinierten ADO.NET-Appender schreiben und die Verbindungszeichenfolge überschreiben:

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

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

Ein vollständiges Beispiel finden Sie unter http://technico.qnownow.com/2012/03/12/how-to-write-custom-ado-net-appender-for-log4net/

1
Veera

Dies sollte in Version 1.2.11 möglich sein. Hier ist der Link zur Ausgabe:

https://issues.Apache.org/jira/browse/LOG4NET-88

0
Stefan Egli

Sie können dies tun, indem Sie AdoNetAppender erben.

  • 1) Erstellen Sie eine Klasse, die von AdoNetAppender erbt.
  • 2) Erstellen Sie als Nächstes eine ConnectionStringName-Eigenschaft, die die Log4Net ConnectionString-Eigenschaft auf eine Verbindungszeichenfolge setzt, die vom .Net ConfigurationManager abgerufen wird.
  • 3) Erstellen Sie einen ConnectionStringName-Eintrag im AdoNetAppender-Abschnitt Ihrer Konfigurationsdatei, der einem vorhandenen connectionString im Abschnitt connectionStrings Ihrer Konfigurationsdatei zugeordnet wird.

Weitere Informationen finden Sie im untenstehenden Blog "Ken Burkhardt".

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

0
Min Min