c# - Cómo puedo usar la cadena de conexión del sitio web actual para log4Net en lugar de configurar
connection-string (6)
Ahora puede usar la propiedad ConnectionStringName de AdoNetAppender, apúntela a un connectionString con nombre en su aplicación o archivo web.config:
Esta pregunta ya tiene una respuesta aquí:
Yo uso log4Net para el registro de mi sistema. El nodo connectionString es obligatorio si el tipo de appender es el AdoNetAppender en Log4Net. Sin embargo, ya tengo una connectionString en mi sitio web donde uso Log4Net.
¿Cómo puedo usar connStr del sitio web para log4Net en lugar de configurar la misma connstr nuevamente en el archivo de configuración log4net?
Esto debería ser posible en la versión 1.2.11. Aquí está el enlace al tema:
Puede actualizar ConnectionString de AdoNetAppender dinámicamente, después de haber configurado log4net para su sitio web, generalmente en Global.asax. Después de su llamada para configurar el log4net utilizando XmlConfigutor()
o algo así, puede llamar al método que se encuentra a continuación, que verifica todos los AdoNetAppenders y actualiza la cadena de conexión requerida.
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
}
}
}
}
Puede hacerlo heredando AdoNetAppender.
- 1) Crea una clase que hereda de AdoNetAppender.
- 2) A continuación, cree una propiedad ConnectionStringName que establecerá la propiedad Log4Net ConnectionString en una cadena de conexión que recupera el .Net ConfigurationManager.
- 3) Cree una entrada ConnectionStringName en la sección AdoNetAppender de su archivo de configuración que se asigna a una cadena de conexión existente en la sección connectionStrings de su archivo de configuración.
Vea el siguiente blog "Ken Burkhardt" para más detalles.
http://kenny-bu.blogspot.com/2011/03/using-connection-string-name-with.html
Puedes hacer esto escribiendo un appender personalizado de ADO.NET 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;
}
}
Puede visitar http://technico.qnownow.com/2012/03/12/how-to-write-custom-ado-net-appender-for-log4net/ para un ejemplo completo
Es bastante simple, solo necesitas reemplazar la configuración de appender connectionString
.
En lugar de la cadena de conexión:
<connectionString value="[Complete Connection]" />
Solo usa la configuración de connectionStringName
:
<connectionStringName value="ApplicationConnection" />
Y luego tienes la cadena de conexión de tu aplicación:
<connectionStrings>
<add name="ApplicationConnection" connectionString="Connection" providerName="System.Data.OracleClient" />
</connectionStrings>
Desafortunadamente, debe tener el tipo de connectionType
con el nombre de la conexión, por 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" />
...