2010-03-14 10 views
41

Ya tengo una cadena de conexión db en mi archivo web.config. Escaneé los documentos de log4net, pero parece que no puedo encontrar la forma de usarlo en la sección log4net de mi archivo web.config. ¿Es posible hacer algo como esto?¿Se puede conectar connectionString para un AdoNetAppender de log4net desde otro lugar en un archivo web.config?

<connectionStrings> 
    <add name="connStr" connectionString="Data Source=localhost; ..." /> 
</connectionStrings> 

<log4net> 
    <appender name="AdoNetAppender" type="log4net.Appender.AdoNetAppender"> 
    <connectionString connectionStringName="connStr"/> 
     ... 
</log4net> 

Respuesta

32

Crear una clase que se extiende AdoNetAppender - dicen, WebAppAdoNetAppender. Implemente la propiedad ConnectionString en esa clase y recupere la cadena de conexión de su archivo web.config en ese conjunto de propiedades.

<log4net> 
    <appender name="AdoNetAppender" type="MyApp.WebAppAdoNetAppender"> 
    ... 

...

public class WebAppAdoNetAppender : log4net.Appender.AdoNetAppender 
{ 
    public new string ConnectionString 
    { 
     get { return base.ConnectionString; } 
     set { base.ConnectionString = ... } 
    } 
} 
+1

El enlace de Stefan Egli indica que aún no existe un parámetro. Por el momento, esta parece ser la mejor manera de hacerlo. Gracias, Sr. Petrotta! – MrSharps

+0

¿Cómo y dónde iba a cargar/llamar/usar esta clase? Estoy empezando con log4net y estoy encontrando la documentación un poco escasa. Estoy ejecutando esto en un trabajo de Quartz.NET, que crea una instancia del registrador para mí. ¿Cómo reemplazaría el registrador predeterminado con mi propia subclase? Gracias. – InteXX

5

FYI Esto se implementará en 1.2.11 acuerdo con this. sin embargo, no tengo idea de cuándo lo lanzarán.

+0

suena como si la función que deseo es próximamente – MrSharps

+2

1.2.11 finalmente se ha lanzado ... –

46

Es posible utilizar una cadena de conexión de base de datos especificada en web.config sin crear una nueva clase, aunque necesitaría usar la construcción de log4net que aún no se ha lanzado. Se puede descargar desde el repositorio SVN http://svn.apache.org/viewvc/logging/log4net/trunk/

Su configuración se verá de la siguiente manera:

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

Tenga en cuenta que connectionType todavía necesita ser especificado.

+15

Esto ahora está disponible en la última versión, 1.2.11. Funciona bien. – dove

4

las respuestas, sobre todo, no funcionan. Tengo otra solución para esto, he intentado y ha funcionado:

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

How i can use the connectionString of the current website for log4Net instead of configuring

+0

Tampoco pude obtener el código anterior para trabajar * y esto *. Para mí, sin embargo, tenía que asegurarme de tener un ConnectionString en blanco en la configuración:

0

A partir de 2017 (log4net 2.0.8.0), las siguientes obras:

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


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

(muy similar a @ Michael La respuesta de Petrotta)

Cuestiones relacionadas