2009-11-13 7 views
24

he visto al menos dos formas de incluir un archivo de configuración de log4net externo en una aplicación Web ASP.NET:Las mejores prácticas para incluir Log4net archivo de configuración externa en ASP.NET

Tener el siguiente atributo en sus AssemblyInfo.cs archivo:

[assembly: log4net.Config.XmlConfigurator(ConfigFile = "Log.config", Watch = true)] 

Llamando al XmlConfigurator en los Global.asax.cs:

protected void Application_Start() 
{ 
    XmlConfigurator.Configure(new FileInfo("Log.config")); 
} 

¿Cuál sería la mejor práctica para hacerlo?

Respuesta

43

En el inicio, llame a:

XmlConfigurator.Configure(); 

En su Web.config, especifique log4net.config en appsettings:

<add key="log4net.Config" value="Log.config" /> 

Esta configuración especial le permite cambiar la configuración del registro sin tener que recompilar . Especialmente útil para moverse entre múltiples entornos.

Ejemplo

Considérese la siguiente estructura archivo de proyecto:

\config\log4net\debug.config 
\config\log4net\staging.config 
\config\log4net\release.config 
\config\appSettings\debug.config 
\config\appSettings\staging.config 
\config\appSettings\release.config 

de aplicación y registro de configuraciones se distinguen para cada entorno. Las referencias a las configuraciones de registro se mantienen en la configuración de la aplicación.

\ config \ appsettings \ Debug.config:

<appSettings> 
    <add key="log4net.Config" value="config\log4net\debug.config" /> 
    ... 
</appSettings> 

\ config \ appsettings \ staging.config:

<appSettings> 
    <add key="log4net.Config" value="config\log4net\staging.config" /> 
    ... 
</appSettings> 

\ config \ appsettings \ Release.config :

<appSettings> 
    <add key="log4net.Config" value="config\log4net\release.config" /> 
    ... 
</appSettings> 

Cambiar entornos es una simple cuestión de actualizar el archivo appSettings en Web.config.

<appSettings file="config\appSettings\staging.config"> 
    ... 
</appSettings> 
+0

Eso es un buen punto, pero realmente no me gusta esta cosa de configuración "mágica". Lo que hice ahora, es declarar tres claves con nombres de archivo en la aplicación Configuración de la Web.config para Debug, Stage, Release y uso de directivas de preprocesador en ApplicationStart para elegir automáticamente la correcta dependiendo de la configuración en la que se implementaron los ensamblados. ¿Cuál es su opinión? ¿Hay algo malo con esa solución? –

+0

@Martin: agregué un ejemplo para ilustrar. El único inconveniente de su solución es la inflexibilidad de las versiones de compilación sobre las alteraciones de web.config. – Anton

+0

thx, por su consejo! –

4

me estaba satisfecha con el enfoque de configuración "mágica", porque quería para especificar la configuración de mi en un camino con una variable de entorno (% PÚBLICA% \ MyApp \ MySettings.config).

Así que en lugar, tengo esto en mi app.config:

<add key="MyLog4NetConfigFile" value="%PUBLIC%\MyApp\MySettings.config"/> 

Y hago esto para establecer mi configuración de log4net:

var configFile = ConfigurationManager.AppSettings.Get("MyLog4NetConfigFile"); 
if(!string.IsNullOrEmpty(configFile)) 
{ 
    configFile = Environment.ExpandEnvironmentVariables(configFile); 
    XmlConfigurator.Configure(new FileInfo(configFile)); 
} 
Cuestiones relacionadas