2010-04-07 5 views
1

J'ai une solution C# qui contient trois exécutables. J'ai chacun de ces trois exécutables partageant le même fichier de configuration de log4net. Au démarrage de chacun des exécutables, ils récupèrent un enregistreur (un enregistreur par exécutable, comme dans le fichier de configuration ci-dessous). Lorsque l'un des exécutables exécute Log.GetLogger(), il crée tous les fichiers de roulement au lieu du seul fichier de roulement appelé appender-ref dans la configuration de l'enregistreur de l'exécutable. Par exemple, lorsque je lance mon démon expéditeur exécutable, il exécute Log.GetLogger ("SendingDaemonLogger") qui crée 3 fichiers Log/RuleScheduler.txt, Log/NotificationGenerator.txt et Log/NotificationSender.txt au lieu de seulement Log/NotificationSender.txt désiré.Log4Net GetLogger crée des fichiers roulants même pour les fichiers non référencés

Ensuite, lorsque je lance un autre des exécutables, par exemple le démon du planificateur de règles, cet autre processus ne peut pas écrire dans Log/RuleScheduler.txt car il a été créé et verrouillé par le démon d'envoi.

Je suppose qu'il peut y avoir trois solutions différentes à mon problème:

  1. Le getLogger ne devrait créer les appenders de fichiers de roulement qui sont référencés dans la configuration

  2. Je devrais avoir une config fichier par exécutable, de cette façon chaque fichier de configuration ne peut répertorier qu'un seul appender de fichier et le démarrage de chaque exécutable ne crée pas les fichiers de roulement des autres démons. Je suis cependant réticent à le faire car une partie de la configuration (appender SMTP, console appender) est partagée entre les démons et je ne veux pas avoir de copies à maintenir. À moins qu'il y ait un moyen d'avoir un fichier de configuration en incluant un autre?

  3. Peut-être existe-t-il un moyen de configurer le fichier roulant afin que l'accès simultané à travers les processus soit autorisé? Cette solution n'est toujours pas parfaite à mon avis, car aucun des démons ne devrait créer les fichiers roulants de certains autres démons.

Merci d'avance pour votre aide!

J'ai des difficultés pour poster le fichier de configuration correctement ici (ce site interprète comme HTML). S'il vous plaît aller au lien suivant pour voir mon fichier de configuration log4net: log4Net configuration file

Répondre

0

Je pense que tous les 3 fichiers sont créés pour la raison donnée dans ce answer. Bien que vous puissiez écrire votre propre appender qui ne montre pas ce comportement, il n'est pas conseillé. Cela vous laisse soit d'avoir 3 fichiers de configuration séparés ou la configuration de verrouillage minimale:

<lockingModel type="log4net.Appender.FileAppender+MinimalLock" /> 

Je n'ai aucune expérience avec ce dernier, donc je ne peux pas vous dire à quel point cela fonctionne. J'irais probablement pour les trois fichiers de configuration séparés.

1

Mieux vaut tard que jamais ...

Utilisez la définition de nom de fichier suivant pour un appender fichier. Le %appdomain sera remplacé au démarrage par le nom convivial appdomains. Vous pouvez maintenant utiliser exactement le même fichier de configuration pour plusieurs applications tout en conservant des fichiers journaux distincts. Pas besoin de configurer plusieurs appenders ...

<file type="log4net.Util.PatternString" value="C:\logs\%appdomain.log" /> 

voir PatternString documentation pour les modèles disponibles.

Questions connexes