Log4Net – Multi configuration

Pour avoir une configuration de Log4net propre à chaque configuration de votre solution, vous pouvez utiliser les XDT transformations , une implémentation automatisée est fourni par l’extension SlowCheetah avec interface graphique pour Visual Studio.
Une fois cette extension installée, clic-droit sur le fichier log4net.config et sélectionner « Add Transform ».

2 sous-fichiers sont ajoutés:

log4net.config
|
+—- log4net.Debug.config
+—- log4net.Release.config

La transformation la plus simple, « Replace », est faîte en ajoutant le tag xml xdt:Transform= »Replace » sur le noeud que vous souhaîtez remplacer.

exemple:

<log4net xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform" xdt:Transform="Replace">

Remplacera le noeud log4net complet.

Un exemple de résultat log4net est ci-inclus .
log4net.config
log4net.Debug.config
log4net.Release.config

Vous pouvez pré visualiser la transformation en effectuant un clic droit sur la version debug ou release et en sélectionnant « Preview Transform » .

La syntaxe de transformation est définie dans la documentation disponible sur:

MSDN Doc Xdt transform

Appliquer une configuration en .Net

Une configuration d’application peut provenir de plusieurs endroits:

  • de la racine de l’application (appliquée par défaut)
  • du compte utilisateur
  • d’un path quelconque

Le premier cas est appliqué par défaut, donc occupons-nous des 2 suivants.

Dans le cas du compte utilisateur, le framework .Net va automatiquement récupérer la bonne configuration suivant le niveau d’accès choisi.

Un exemple de code:

System.Configuration.Configuration config;
config = ConfigurationManager.OpenExeConfiguration(configAccessLevel);

Enfin à partir d’un chemin d’accès:

public static System.Configuration.Configuration GetConfigByPath(string path)
{
      if (!File.Exists(path)) return null;

       ExeConfigurationFileMap fileMap = new ExeConfigurationFileMap();
       fileMap.ExeConfigFilename = @path;
       return ConfigurationManager.OpenMappedExeConfiguration(fileMap, ConfigurationUserLevel.None);
}