Je souhaite ajouter la journalisation à une application sur laquelle je travaille actuellement. J'ai ajouté la journalisation avant, ce n'est pas un problème ici.
Mais du point de vue de la conception dans un langage orienté objet, quelles sont les meilleures pratiques de journalisation qui suivent la POO et les modèles?
Remarque: je fais actuellement cela en C #, donc les exemples en C # sont évidemment les bienvenus. J'aimerais aussi voir des exemples en Java et Ruby.
Edit: j'utilise log4net. Je ne sais tout simplement pas quelle est la meilleure façon de le brancher.
la source
Puisque vous faites cela en C #, je vous recommanderais de regarder NLog et ElMAH. Ils peuvent être TRÈS facilement installés à l'aide de NUGET. J'ai mis quelques liens vers ceux ci-dessous afin que vous puissiez obtenir plus d'informations.
la source
Personnellement, je prends le cadre de journalisation de choix (dans mon cas, Entlib car je travaille avec .NET) et j'écris un aspect AOP pour la journalisation.
Vous pouvez ensuite attribuer toutes les méthodes / propriétés / classes / espaces de noms et y ajouter la journalisation sans encombrer la source.
la source
Le système sur lequel je travaille actuellement utilise une architecture et une messagerie pilotées par les événements, de sorte que la plupart des actions de notre système sont le résultat d'une commande et entraînent des événements (en tant que classes DTO qui sont distribuées, plutôt qu'un événement délégué standard). Nous attachons des gestionnaires d'événements dont le seul but est de gérer la journalisation. Cette conception nous aide à ne pas nous répéter et à ne pas avoir à modifier le code existant pour ajouter / changer des fonctionnalités.
Voici un exemple d'une telle classe de journalisation, qui gère tous les événements à consigner à partir d'une section étroite de notre application (ceux concernant une source de contenu particulière à partir de laquelle nous importons).
Je ne dirai pas nécessairement qu'il s'agit de bonnes pratiques, car je semble changer d'avis sur quoi et comment me connecter souvent - et chaque fois que j'ai besoin d'utiliser un journal pour diagnostiquer un problème, je trouve inévitablement des moyens d'apporter des améliorations à la informations que j'enregistre.
Je dirai, cependant, que l'enregistrement des informations pertinentes (en particulier de manière Ctrl-F / find avec possibilité de recherche) est la partie la plus importante.
La deuxième partie la plus importante consiste à éloigner le code de journalisation de votre logique principale - cela peut rendre une méthode laide et longue et compliquée très rapidement.
la source
Comme d'autres l'ont dit, utilisez
log4j
oulog4net
ou un autre cadre de journalisation bien construit.J'ai tendance à vraiment détester le code de journalisation qui gêne la logique métier. Voilà pourquoi j'utilise
Log4PostSharp
. Cela signifie que je peux utiliser la programmation orientée aspect pour annoter des méthodes comme celle-ci:Ou chaque méthode dans un assemblage comme celui-ci:
la source
Je ne sais pas si un cadre le fait, mais du point de vue de la conception, je modéliserais les informations qui doivent être enregistrées principalement en trois catégories:
Pour les deux premières catégories, mon cadre de journalisation idéal devrait les gérer comme un processus de post-construction et transparent pour les développeurs. Ce serait bien d'ajouter de façon déclarative la journalisation aux assemblys, quelque chose comme ceci:
Pour la 3e catégorie, les programmeurs peuvent simplement créer une ou plusieurs méthodes de «journalisation» dédiées et tirer parti du suivi pour la première catégorie. Les méthodes de journalisation ne font rien de plus que de servir de point de stub auquel les règles de traçage peuvent être appliquées.
la source