visual studio mvc ejemplo c# asp.net web-config log4net

c# - studio - ¿Se puede extraer connectionString para un AdoNetAppender de log4net desde otro lugar en un archivo web.config?



log4net mvc c# (5)

A partir de 2017 (log4net 2.0.8.0 ), funciona lo siguiente:

public class MyAdoNetAppender : AdoNetAppender { public MyAdoNetAppender() { ConnectionString = ... } } <appender name="AdoNetAppender" type="MyApp.MyAdoNetAppender">

(Muy similar a la respuesta de @Michael Petrotta)

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?

<connectionStrings> <add name="connStr" connectionString="Data Source=localhost; ..." /> </connectionStrings> <log4net> <appender name="AdoNetAppender" type="log4net.Appender.AdoNetAppender"> <connectionString connectionStringName="connStr"/> ... </log4net>


Cree una clase que extienda AdoNetAppender , por ejemplo, WebAppAdoNetAppender . Implemente la propiedad ConnectionString en esa clase y recupere la cadena de conexión de su archivo web.config en ese setter 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 = ... } } }


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 creación de log4net que aún no se ha lanzado. Se puede descargar del repositorio de SVN http://svn.apache.org/viewvc/logging/log4net/trunk/

Tu 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 aún necesita ser especificado.


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


las respuestas sobre todo no funcionan. Tengo otra solución para esto, lo intenté y funcionó:

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

Cómo puedo usar connectionString del sitio web actual para log4Net en lugar de configurar