Práctica recomendada para incluir el archivo de configuración externo log4Net en ASP.NET


He visto al menos dos formas de incluir un archivo de configuración de log4net externo en un ASP.NET aplicación web:

Que tiene el siguiente atributo en su AssemblyInfo.archivo cs:

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

Llamando al XmlConfigurator en el Global.asax.cs:

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

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

Author: Martin Buberl, 2009-11-13

2 answers

Al inicio, llame a:

XmlConfigurator.Configure();

En tu Web.config, especifique log4net.Configuración 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

Considere la siguiente estructura de archivos 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

Las configuraciones de aplicación y registro se distinguen para cada entorno. Referencias al registro las configuraciones 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>
 43
Author: Anton,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-11-13 22:32:59

No estaba satisfecho con el enfoque de configuración "mágico", porque quería especificar mi configuración en una ruta con una variable de entorno (%PUBLIC%\MyApp\MySettings.config).

Así que en su lugar, tengo esto en mi aplicación.config:

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

Y haga 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));
}
 4
Author: pduncan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-01-12 16:33:17