2012-03-15 32 views
24

Utilizo log4Net para el registro de mi sistema. El nodo connectionString es obligatorio si el tipo de appender es AdoNetAppender en Log4Net. Sin embargo, ya tengo un connectionString en mi sitio web donde uso Log4Net.Cómo puedo usar el connectionString del sitio web actual para log4Net en lugar de configurar

¿Cómo puedo usar el connStr del sitio web para log4Net en lugar de configurar el mismo connstr nuevamente en el archivo de configuración de log4net?

+0

Esta es la misma pregunta que http://stackoverflow.com/questions/2441359/can-you-pull-the-connectionstring-for-a-log4net-adonetappender-from-elsewhere- en – user1069816

Respuesta

0

Puede hacerlo heredando AdoNetAppender.

  • 1) Cree una clase que herede de AdoNetAppender.
  • 2) A continuación, cree una propiedad ConnectionStringName que establecerá la propiedad Log4Net ConnectionString en una cadena de conexión que recupera .Net ConfigurationManager.
  • 3) Cree una entrada ConnectionStringName en la sección AdoNetAppender de su archivo de configuración que se correlaciona con un connectionString existente en la sección connectionStrings de su archivo de configuración.

Consulte el siguiente blog "Ken Burkhardt" para obtener más información.

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

+0

Gracias minmin, no puedo abrir el enlace que proporcionó lo que me dijo debe encontrarse en el siguiente enlace http://stackoverflow.com/questions/2441359/can-you-pull-the-connectionstring-for-a-log4net -adonetappender-from-elsewhere-in. Pero no funciona. –

14

Puede actualizar ConnectionString AdoNetAppender dinámicamente, después de haber configurado log4net para su sitio web, por lo general en el Global.asax. Después de su llamada para configurar el log4net usando XmlConfigutor() o algo así ... puede llamar al siguiente método que verifica todos los AdoNetAppenders y actualiza el connectionString requerido.

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

Usted puede hacer esto escribiendo un appender ADO.NET costumbre y anulando la cadena de conexión:

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

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

se puede visitar http://technico.qnownow.com/2012/03/12/how-to-write-custom-ado-net-appender-for-log4net/ para un ejemplo completo

+0

utilicé el camino de Narayan Akhade. gracias –

34

Es bastante más simple, solo necesita reemplazar la configuración del appender connectionString.

En lugar de la cadena de conexión:

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

sólo tiene que utilizar la configuración connectionStringName:

<connectionStringName value="ApplicationConnection" /> 

Y entonces usted tiene la cadena de conexión de la aplicación:

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

Desafortunadamente debe tener el connectionType con la conexión Strin gname, ejemplo:

<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

¿Funciona esto con cadenas de conexión cifradas? Lo conseguí trabajando con texto sin formato, pero el registro se detiene cuando encripto la cadena de conexión – raider33

+0

¡Esto funcionó perfecto para mí! Y como utilizo los perfiles de publicación para diferentes entornos, esto me alegró por completo, ya que simplificó enormemente lo que tenía que hacer para que la configuración funcionara. – JohanLarsson

Cuestiones relacionadas