2009-02-09 9 views
0

Je travaille sur la configuration de log4net dans une application multi-niveaux. J'ai la plupart de mon journal mis en place comme vous le souhaitez, mais maintenant j'essaie d'obtenir les entrées <logger> dans .config mis en place de manière à permettre une flexibilité maximale sur les niveaux en cours de production.log4net imbriqués loggers .config exemple

Ma convention de nommage de l'enregistreur est quelque chose comme:.. [ExternalModuleName (s)]
ExecutableName.WorkerThreadName ClassName

Ma section en cours de définition de l'enregistreur dans le fichier .config ressemble à:

<root> 
    <level value="DEBUG" /> 
    <appender-ref ref="MyAppender" /> 
</root> 

<logger name = "ExecutableName"> 
    <level value="FATAL" /> 
</logger> 

<logger name = "ExecutableName.WorkerThreadName"> 
    <level value="OFF" />  
</logger> 

<logger name = "ExecutableName.WorkerThreadName.ClassName"> 
    <level value="INFO" />   
</logger> 
<!--repeat as necessary---> 

J'espère que vous avez l'idée ... Il semble que cela a le potentiel d'exploser dans un gâchis d'entrées difficiles à maintenir (surtout lorsque l'application atteint une phase de support).
Des suggestions sur la meilleure façon de gérer les définitions de niveau pour les enregistreurs imbriqués?
J'ai joué un peu avec l'imbrication des instructions XML, mais cela ne semble pas fonctionner.

Répondre

2

Généralement, je veux attraper tous les messages, au moins des avertissements et des niveaux sévères. Étant donné que les enregistreurs héritent de leur niveau des enregistreurs supérieurs dans la hiérarchie et, en fin de compte, de l'enregistreur racine, j'attribue des niveaux uniquement aux enregistreurs de niveau supérieur. Dans votre cas, ce sont les enregistreurs "ExecutableName".

Pour les enregistreurs de cas spéciaux à partir de laquelle je suis par exemple. pas intéressé à voir autre que les messages FATAL, je vais ajouter un paramètre de niveau spécifique. Mais ce n'est généralement pas le cas général et sera donc de taille gérable.

Je trouve utile de régler par ex. WARN ou INFO à ces enregistreurs de niveau supérieur, puis utiliser appenders avec des filtres sur les différents niveaux. Le résultat est que la quantité potentiellement importante de messages est regroupée dans différents stockages en fonction du niveau. Vous pouvez même avoir des appenders distincts pour chaque enregistreur de niveau supérieur afin d'obtenir un contrôle encore plus précis sur le flux de messages.