2009-10-01 10 views
1

Les applications sur lesquelles je travaille font énormément de choses et je trouve qu'il est assez difficile d'analyser les journaux lorsque je les passe en revue. Surtout quand je débogue/teste un peu de code particulier. et doivent parcourir des pages et des pages de données de journal non pertinentes.Consignation d'un sous-ensemble de messages par contexte

Existe-t-il un moyen raisonnable de gérer la journalisation (Primarilly en Java, mais aussi intéressé par .Net) qui me permettrait de ne valider qu'un sous-ensemble de choses pendant que je travaille sur une fonctionnalité particulière mais permettez-moi pour tout enregistrer à d'autres moments. J'ai envisagé de monnayer les déclarations de journaux qui m'intéressent et de les satisfaire, ou d'envelopper la bibliothèque de loggers (log4j/log4net) dans une classe qui me permet de spécifier un contexte qui m'intéresse, et seulement commettre cela.

Existe-t-il un moyen standard de le faire? Par exemple, pour l'instant, je ne suis pas intéressé par la sortie de plusieurs tâches planifiées qui s'exécutent une fois par seconde, et la sortie des deux couches qui entourent mes classes de niveau intermédiaire ne m'intéresse pas. mais je suis intéressé par sa sortie.

Répondre

3

La clé pour contrôler la verbosité dans différentes parties de votre application lors de l'utilisation de log4j/log4net consiste à nommer vos enregistreurs de manière appropriée. Normalement, la convention consiste à les nommer de la même manière que le nom de classe complet auquel ils se rapportent, mais vous pouvez utiliser n'importe quel nom arbitraire. Le nom du consignateur est juste un espace de noms hiérarchique en pointillés que vous, en tant que développeur, pouvez définir comme bon vous semble. Une fois que les zones de votre application ont été définies (chaque nœud de la hiérarchie des espaces de noms est une "zone"), vous pouvez configurer la verbosité pour chaque zone et obtenir des messages DEBUG de niveau très détaillé pour une zone que vous êtes se concentrer sur tout en ne laissant passer que les messages de niveau ERROR provenant d'autres zones.

Vous n'avez pas beaucoup parlé du contexte qui vous intéresse, mais dans les deux log4j et log4net vous pouvez définir les propriétés qui sont ajoutées aux instances LoggingEvent. Vous pouvez utiliser des classes de filtre existantes ou créer des classes de filtre sur mesure qui laissent passer ou non les événements en fonction de leurs propriétés. Vous configurez ensuite vos filtres dans la configuration log4j/log4net, et vous devriez pouvoir être très précis sur les informations de journalisation qui sont extraites d'une zone spécifique de votre application. Remarque: pour utiliser les filtres avec log4j, vous devez utiliser XML plutôt qu'un fichier .properties pour la configuration.

Questions connexes