2009-11-13 3 views
24

Je l'ai vu au moins deux façons d'inclure un fichier de configuration de log4net externe dans une application Web ASP.NET:Les meilleures pratiques pour inclure Log4net fichier de configuration externe dans ASP.NET

Avoir l'attribut suivant dans votre AssemblyInfo.cs fichier:

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

appel du XmlConfigurator dans les Global.asax.cs:

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

Quelle serait la meilleure pratique de le faire?

Répondre

43

Au démarrage, appelez:

XmlConfigurator.Configure(); 

Dans votre web.config, spécifiez log4net.Config dans appsettings:

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

Ce paramètre spécial vous permet de modifier la configuration du journal sans avoir à recompiler . Particulièrement utile pour se déplacer entre plusieurs environnements.

Exemple

examiner la structure de fichier de projet suivante:

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

applications et configurations exploitation sont distingués pour chaque environnement. Les références aux configurations de journalisation sont conservées dans les paramètres de l'application.

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

Modifier des environnements consiste simplement à mettre à jour le fichier appSettings dans Web.config.

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

C'est un bon point, mais je n'aime vraiment pas cette chose de configuration "magique". Ce que j'ai fait maintenant, est de déclarer trois clés avec des noms de fichiers dans les appSettings de Web.config pour Debug, Stage, Release et utiliser des directives de préprocesseur dans ApplicationStart pour choisir automatiquement la bonne en fonction de la configuration dans laquelle les assemblys ont été déployés. Quelle est votre opinion? Y a-t-il un problème avec cette solution? –

+0

@Martin: J'ai ajouté un exemple à illustrer. Le seul inconvénient de votre solution est l'inflexibilité des versions de build par rapport aux modifications web.config. – Anton

+0

thx, pour vos conseils! –

4

j'étais pas satisfait de l'approche de configuration "magique", parce que je voulais préciser ma configuration dans un chemin avec une variable d'environnement (%% PUBLIC \ MyApp \ MySettings.config).

Ainsi, au lieu, j'ai dans mon app.config:

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

Et fais ceci pour définir ma configuration log4net:

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