2008-09-27 7 views
15

Je pense que je pourrais manquer le point d'avoir un cadre de journalisation pour votre application. Dans toutes les petites applications, j'ai toujours écrit une petite classe "Logging" et je viens de passer des messages de log à une méthode qui est écrite dans un fichier.À quoi sert d'utiliser un cadre de journalisation?

Quel est le but d'un cadre de journalisation tiers tel que log4net? Est-ce la sécurité des threads avec les opérations d'écriture de journalisation ou ai-je oublié quelque chose?

Répondre

18

C'est une excellente question.

La première raison est "pourquoi pas?" Si vous utilisez un framework de journalisation, vous bénéficierez des avantages de la maintenabilité de l'utilisation de quelque chose déjà empaqueté.

La deuxième raison est que la journalisation est subtile.Différents threads, sessions, classes et instances d'objets peuvent tous entrer en jeu dans la journalisation, et vous ne voulez pas avoir à résoudre ce problème à la volée.

La troisième raison est que vous pouvez trouver un goulot d'étranglement au niveau des performances dans votre code. Comprendre que votre code est lent parce que vous écrivez dans un fichier sans mise en mémoire tampon ou votre disque dur est à court d'espace disque parce que l'enregistreur ne se retourne pas et compresser les anciens fichiers peut être une douleur dans le cou. La quatrième raison est que vous pouvez ajouter à syslog, ou écrire dans une base de données, ou dans une socket, ou dans des fichiers différents. Les cadres ont cette fonctionnalité intégrée.

Mais vraiment, la première réponse est la meilleure; il y a très peu d'avantages à écrire les vôtres, et tout un tas d'inconvénients.

3

vous voudrez peut-être passer pour se connecter à un db pour un message, ou d'un système d'alerte que les pages de la personne pauvre sur le soutien

Plus important encore, la plupart des cadres de journalisation vous permettent de spécifier l'loglevel de différentes classes afin vous ne avez pas besoin de couper un nouveau binaire chaque fois que vous voulez l'enregistrement plus/moins (que la journalisation détaillée pour le bug que vous venez repéré dans la production)

Log4Net's site a plus en détail

1

Selon la puce de votre propre implémentation du système d'exploitation forestière est. En Java, si vous voulez hériter des types de journaux, etc., cela peut être trop compliqué et vous préféreriez un outil tiers comme Log4J. Je suppose qu'il y a des choses similaires pour C#. De même si vous voulez déterminer le niveau de journal à partir de la ligne de commande.

Si vous souhaitez simplement acheminer tous vos System.out et contrôler s'ils sont imprimés à chaque compilation, votre propre enregistreur fonctionnera très bien.

2

En un mot: flexibilité. Log4xxx vous donne la possibilité de faire différents niveaux de journalisation, de connecter différents modules de code à différents fichiers, et vous pouvez compter sur lui pour être fiable quelle que soit la situation étrange qu'il frappe (que fera votre enregistreur si le disque manque d'espace ?)

2

Quelque chose les autres commentaires ont omis: s'il y a déjà une bibliothèque qui fait ce que vous voulez, il vous évite d'avoir à écrire le code.

Peut-être que vous jouez la sémantique ici: pour moi, un "framework de journalisation" est un peu plus qu'une classe qui écrit des messages de log dans un fichier ... alors ce que vous avez fait est d'écrire votre propre logging cadre. Étant donné que vous l'avez fait, il y a évidemment certains points dans "l'utilisation d'un cadre de journalisation"! En fin de compte, vous devrez vous assurer qu'il gère correctement la journalisation simultanée (verrouillage du flux de sortie), peut se connecter à un fichier, syslog, etc., peut faire rouler le journal, et ainsi de suite. Vous pouvez vous épargner cet effort en utilisant le code bien testé de quelqu'un d'autre.

1

Les cadres de diagraphie offrent une flexibilité et vous empêchent de réinventer la roue. Je sais que c'est simple à ajouter à un fichier dans n'importe quelle langue moderne, mais est-ce que votre enregistreur local a plusieurs cibles? Pouvez-vous activer et désactiver la journalisation au moment de l'exécution? Pourquoi risquer un pneu à plat lorsque ces roues sont disponibles gratuitement?

+0

"cerveau-mort simple à ajouter à un fichier" - vs multithread et en particulier multicœur où les threads réellement exécuter simultanément? L'ETW de Microsoft propose des buffers d'entrées ETW par processeur, ce qui me semble être la solution idéale. – pngaz

Questions connexes