2012-03-15 10 views
24

Uso log4Net per il registro del mio sistema. Il nodo connectionString è obbligatorio se il tipo di appender è AdoNetAppender in Log4Net. Tuttavia, ho già una connectionString nel mio sito Web in cui utilizzo Log4Net.Come posso utilizzare la connectionString del sito Web corrente per log4Net invece di configurare

Come è possibile utilizzare il connStr del sito Web per log4Net invece di configurare nuovamente lo stesso connstr nel file di configurazione log4net?

+0

Questa è la stessa domanda http://stackoverflow.com/questions/2441359/can-you-pull-the-connectionstring-for-a-log4net-adonetappender-from-elsewhere- in – user1069816

risposta

0

È possibile farlo ereditando AdoNetAppender.

  • 1) Creare una classe che eredita da AdoNetAppender.
  • 2) Quindi creare una proprietà ConnectionStringName che imposti la proprietà ConnectionString di Log4Net su una stringa di connessione recuperata da .Net ConfigurationManager.
  • 3) Creare una voce ConnectionStringName nella sezione AdoNetAppender del file di configurazione che esegue il mapping a una connectionString esistente nella sezione connectionStrings del file di configurazione.

Vedere sotto il blog "Ken Burkhardt" per i dettagli.

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

+0

Grazie minmin, non riesco ad aprire il collegamento che hai dimostrato che quello che mi hai detto dovrebbe essere trovato dal seguente link http://stackoverflow.com/questions/2441359/can-you-pull-the-connectionstring-for-a-log4net -adonetappender-da-altrove-in. MA non funziona. –

14

È possibile aggiornare ConnectionString AdoNetAppender dinamicamente, dopo aver configurato log4net per il tuo sito, di solito in Global.asax. Dopo la chiamata per configurare il log4net utilizzando XmlConfigutor() o qualcosa del genere .. è possibile chiamare il metodo seguente che controlla tutte le AdoNetAppenders e aggiorna la connectionString richiesta.

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

Si potrebbe fare questo scrivendo un appender ADO.NET personalizzato e sovrascrivendo la stringa di connessione:

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

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

si può visitare http://technico.qnownow.com/2012/03/12/how-to-write-custom-ado-net-appender-for-log4net/ per un esempio completo

+0

ho usato la strada da Narayan Akhade. grazie –

34

È molto più semplice, è sufficiente sostituire la configurazione dell'appender connectionString.

Al posto della stringa di connessione:

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

basta usare la configurazione connectionStringName:

<connectionStringName value="ApplicationConnection" /> 

E poi ci sono la stringa di connessione dell'applicazione:

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

Purtroppo si deve avere il connectionType con connectionStrin gname, esempio:

<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" /> 
... 
+1

Funziona con stringhe di connessione crittografate? Ho funzionato con testo normale, ma la registrazione si interrompe quando crittografo la stringa di connessione – raider33

+0

Questo ha funzionato perfettamente per me! E dal momento che utilizzo i profili di pubblicazione per diversi ambienti, questo ha reso la mia giornata completamente semplificata, in quanto ha notevolmente semplificato ciò che dovevo fare per far funzionare la configurazione – JohanLarsson

Problemi correlati