Quand ai-je besoin de plus d’une TraceSource dans le code?

Si une application écrit toutes ses données d’activité dans un fichier journal, est-il utile d’utiliser plusieurs TraceSource? Je suis simplement curieux de savoir quels cas d’utilisation nécessitera plus d’un TraceSource dans le code.

Reportez-vous à ces réponses à d’autres questions pour connaître le bon sharepoint départ de l’utilisation de TraceSources:

ne comprend pas le traçage .net 2010 et app.config

Comment utiliser TraceSource sur plusieurs classes

Je dirais que chaque fois que vous avez plus d’une classe, vous pourriez envisager d’avoir plus d’une TraceSource.

L’avantage de disposer de plus d’une source TraceSource est qu’elle augmente la granularité de contrôle de la journalisation. Par exemple, si vous utilisez un autre TraceSource dans chaque classe, vous pouvez contrôler la journalisation jusqu’au niveau de la classe. Vous pouvez activer une (ou plusieurs) classe (s) spécifique (s) et désactiver toutes les autres.

Ceci est un modèle courant pour les utilisateurs de NLog et log4net. L’initialisation typique des classes utilisant ces plates-formes de journalisation ressemblera à ceci:

public class A { //NLog example private static Logger logger = LogManager.GetCurrentClassLogger(); public F() { logger.Info("Inside F"); } } 

Dans cet exemple, le consignateur de la classe A porte le nom complet de la classe (NLog effectue le travail difficile dans GetCurrentClassLogger ()).

Pour faire quelque chose de similaire avec TraceSource, vous feriez quelque chose comme ceci:

 public class A { private static TraceSource ts = new TraceSource(System.Reflection.GetCurrentMethod().DeclaringType.ToSsortingng(); public F() { ts.Information("Inside F"); } } 

Si vous faisiez cela dans chaque classe, vous pourriez facilement contrôler votre journalisation par classe.

Je ne suis pas sûr que ce modèle soit aussi commun à TraceSource qu’à log4net et NLog. Je pense que les utilisateurs de TraceSource obtiendraient plus souvent leurs ressources TraceSource par zone fonctionnelle.

Ainsi, vous pouvez diviser votre application en fonctionnalités de “Lecture”, “Processus” et “Écriture” (ou selon ce qui vous convient le mieux). Dans ce cas, vous pouvez obtenir le TraceSource approprié dans vos classes en fonction du domaine fonctionnel dans lequel elles sont utilisées:

 public class FileReader { private static TraceSource ts = new TraceSource("Read"); public F() { ts.Information("Hello from FileReader.F"); } } public class NetworkReader { private static TraceSource ts = new TraceSource("Read"); public F() { ts.Information("Hello from NetworkReader.F"); } } 

Etc.

Vous pouvez maintenant activer la connexion pour “Lire” et désactiver pour toutes les autres zones fonctionnelles (ou activer la journalisation détaillée pour “Lire” et la journalisation moins détaillée pour tous les autres).

En outre, l’une des options de TraceListeners consiste à générer le nom TraceSource. Ainsi, dans votre sortie, il sera plus facile de comprendre votre journalisation car vous pourrez, si vous le souhaitez, retrouver assez facilement tous les messages de journalisation générés à partir d’un domaine fonctionnel particulier (ou par un TraceSource particulier).

Si vous avez une bonne convention de dénomination d’espace de nom, vous pouvez même envisager d’obtenir TraceSource pour chaque classe en fonction d’un nœud dans la hiérarchie de l’espace de nom ou même de l’assembly dans lequel la classe vit. Il existe des appels .NET pour un type qui extraira cette information pour vous.

Puisque vous consultez TraceSources, je vous encourage à consulter ce projet chez codeplex:

http://ukadcdiagnostics.codeplex.com/

C’est un beau projet (basé sur TraceSource) qui vous permet de formater votre sortie de journalisation de la même manière que ce que vous pouvez faire avec log4net et NLog.

Je vous encourage également à jeter un coup d’œil à cette enveloppe de journalisation construite autour de TraceSource de Castle.

https://github.com/castleproject/Castle.Core/blob/master/src/Castle.Core/Core/Logging/TraceLogger.cs

La chose intéressante qu’ils ont faite est de fournir une hiérarchie aux noms TraceSource. J’ai mis en place quelque chose de similaire dans le passé. Ça marche plutôt bien.

Ma réponse à cette question donne une idée de l’utilité d’une hiérarchie TraceSource:

Quelle est la meilleure approche pour la journalisation?

Bonne chance!