2010-04-22 6 views
0

J'utilise log4net au cours de mon développement, car dans le cadre d'une contrainte de projet, je dois maintenant l'ajouter au Global Assembly Cache.Log4Net et GAC - Comment référencer les fichiers de configuration?

Les définitions de journalisation se trouvent dans un fichier Log4Net.xml. Ce fichier est référencé dans mon assemblyinfo comme: [assembly: log4net.Config.XmlConfigurator (ConfigFile = "Log4Net.xml", Watch = true)]. Tant que le fichier xml était dans le même répertoire que le fichier log4net.dll, tout fonctionnait correctement. Cependant, maintenant que j'ai ajouté log4net au GAC, il ne récupère plus le fichier XML.

Est-ce que quelqu'un sait ce que j'ai besoin de changer pour qu'il reprenne le fichier XML? Le codage en dur du patch dans la référence d'assemblage est-il le seul moyen?

Un grand merci

Répondre

0

Vous pourriez vous assurer que votre fichier log4net.xml est réglé sur « Toujours copier » (clic droit sur log4net.xml -> Propriétés -> Copier Output Directory = Copie toujours). Pour vous assurer que votre fichier de configuration est en cours de copie, vous devez vérifier votre répertoire bin \ debug ou bin \ release et vérifier que le fichier log4net.xml existe dans le même répertoire que celui exécuté par votre application.

Si cela ne fonctionne pas, vous pouvez essayer d'activer le débogage interne dans log4net. Pour activer le débogage interne, ajoutez la clé suivante à votre fichier app.config. Cela enverra des messages de débogage log4net internes à votre fenêtre Visual Studio Output (Affichage -> Sortie).

<configuration> 
    <appSettings> 
    <add key="log4net.Internal.Debug" value="true"/> 
    </appSettings> 
</configuration> 

Pour plus d'informations sur le débogage interne de log4net, vous pouvez vérifier le billet de blog de Phil Haack here.

Si tout le reste échoue, vous pouvez activer le débogage interne et charger explicitement la configuration en appelant la méthode XmlConfigurator.ConfigureAndWatch de log4net.

var fi = new FileInfo(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) + "\\log4net.xml"); 
XmlConfigurator.ConfigureAndWatch(fi); 
+0

Un grand merci à vous-même et à Stefan, vous m'avez donné beaucoup d'options ici. Merci pour vos messages. – Adam

3

log4net attend le fichier de configuration pour être dans le chemin retourné par:

System.AppDomain.CurrentDomain.BaseDirectory 

Laissez votre impression de l'application de ces informations à un certain fichier, puis vous savez où vous devez placer le fichier de configuration.

Bien sûr, il existe d'autres solutions, mais vous ne pouvez plus utiliser l'attribut. L'appel direct de la méthode ConfigureAndWatch() vous permet de déterminer vous-même où se trouve le fichier de configuration; vous pouvez même décider d'un emplacement (ne doit pas être un chemin codé en dur).

Questions connexes