182 votes

En python, pourquoi utiliser logging au lieu de print ?

Pour un simple débogage dans un projet complexe, y a-t-il une raison d'utiliser le logger python au lieu de print ? Qu'en est-il des autres cas d'utilisation ? Existe-t-il un cas d'utilisation optimal pour chacun d'entre eux (en particulier lorsque l'on ne recherche que le stdout) ?

J'ai toujours entendu dire que c'était une "meilleure pratique", mais je n'ai pas réussi à comprendre pourquoi.

17 votes

Pour les grands projets, la journalisation est toujours une "meilleure pratique" car vous pouvez facilement l'activer ou la désactiver, et obtenir plus ou moins d'informations. L'impression n'offre aucun de ces avantages.

1 votes

3 votes

Je ne pense pas qu'il y ait jamais un meilleur cas d'utilisation pour print .

198voto

Le paquet de journalisation a beaucoup de fonctionnalités utiles :

  • Il est facile de voir où et quand (et même quel numéro de ligne) un appel d'enregistrement est effectué.
  • Vous pouvez vous connecter à des fichiers, des sockets, à peu près tout, en même temps.
  • Vous pouvez différencier votre journalisation en fonction de la gravité.

L'impression n'a rien de tout cela.

De plus, si votre projet est destiné à être importé par d'autres outils python, il n'est pas recommandé que votre paquetage imprime des choses sur stdout, puisque l'utilisateur ne saura probablement pas d'où proviennent les messages d'impression. Avec la journalisation, les utilisateurs de votre paquet peuvent choisir s'ils veulent ou non propager les messages de journalisation de votre outil.

36voto

rid Points 24625

L'un des principaux avantages d'une journalisation appropriée est que vous pouvez catégoriser les messages et les activer ou les désactiver en fonction de vos besoins. Par exemple, il peut être utile d'activer les messages de niveau débogage pour une certaine partie du projet, mais de les atténuer pour les autres parties, afin de ne pas être submergé par une surcharge d'informations et de pouvoir se concentrer facilement sur la tâche pour laquelle vous avez besoin de la journalisation.

En outre, les journaux sont configurables. Vous pouvez facilement les filtrer, les envoyer vers des fichiers, les formater, ajouter des horodatages et toutes les autres choses dont vous pourriez avoir besoin sur une base globale. Les relevés d'impression ne sont pas faciles à gérer.

20voto

IfLoop Points 59461

Les instructions d'impression sont en quelque sorte le le pire des deux mondes en combinant les aspects négatifs d'un débogueur en ligne avec une instrumentation de diagnostic. Vous devez modifier le programme mais tu n'auras pas plus de code utile d'elle.

Un débogueur en ligne vous permet d'inspecter l'état d'un programme en cours d'exécution. Mais ce qu'il y a de bien avec un vrai débogueur, c'est qu'il n'est pas nécessaire de modifier le code source, ni avant ni après la session de débogage ; il suffit de charger le programme dans le débogueur, d'indiquer au débogueur où vous voulez regarder, et le tour est joué.

L'instrumentation de l'application peut nécessiter un certain travail au départ, en modifiant le code source d'une manière ou d'une autre, mais la sortie de diagnostic qui en résulte peut contenir d'énormes quantités de détails, et peut être activée ou désactivée à un degré très spécifique. Le module de journalisation de python peut montrer non seulement le message enregistré, mais aussi le fichier et la fonction qui l'a appelé, une traceback s'il y en a une, l'heure réelle à laquelle le message a été émis, et ainsi de suite. Plus que cela, l'instrumentation de diagnostic doit jamais Il est tout aussi valable et utile lorsque le programme est terminé et en production qu'il l'était le jour où il a été ajouté ; mais sa sortie peut être placée dans un fichier journal où elle ne risque pas d'ennuyer quelqu'un, ou le niveau du journal peut être réduit pour ne laisser passer que les messages les plus urgents.

Anticiper la nécessité ou l'utilisation d'un débogueur n'est pas vraiment plus difficile que d'utiliser ipython pendant les tests et de se familiariser avec les commandes qu'il utilise pour contrôler le débogueur pdb intégré.

Lorsque vous pensez qu'une instruction d'impression pourrait être plus facile que d'utiliser pdb (comme c'est souvent le cas), vous constaterez que l'utilisation d'un logger place votre programme dans un état beaucoup plus facile à travailler que si vous utilisez et supprimez plus tard les instructions d'impression.

J'ai configuré mon éditeur pour qu'il mette en évidence les instructions d'impression comme suit erreurs de syntaxe et à enregistrer les déclarations en tant que commentaires, puisque c'est à peu près ainsi que je les considère.

6voto

Benyamin Jafari Points 2126

En bref, les avantages de l'utilisation des bibliothèques de journalisation l'emportent sur les inconvénients suivants print comme les raisons ci-dessous :

  • Contrôlez ce qui est émis
  • Définissez les types d'informations que vous souhaitez inclure dans vos journaux.
  • Configurer l'apparence de l'objet lorsqu'il est émis
  • Le plus important est de définir la destination de vos journaux.

En détail, la segmentation des événements de journal par niveau de gravité est un bon moyen de passer au crible les messages de journal qui peuvent être les plus pertinents à un moment donné. Le niveau de gravité d'un événement de journal vous donne également une indication du degré d'inquiétude que vous devez avoir lorsque vous voyez un message particulier. Par exemple, en divisant le type de journalisation en déboguer , info , avertissement , critique et erreur . Le timing peut être déterminant lorsque vous essayez de comprendre ce qui n'a pas fonctionné dans une application. Vous voulez connaître les réponses à des questions telles que :

  • "Cela s'est-il produit avant ou après la mort de ma connexion à la base de données ?"
  • "Quand exactement cette demande a-t-elle été faite ?"

En outre, il est facile de voir où un enregistrement s'est produit grâce au numéro de ligne et au nom du fichier ou de la méthode, et même dans quel thread.


Voici une bibliothèque de journalisation fonctionnelle pour Python nommée loguru .

5voto

Si vous utilisez la journalisation, la personne responsable du déploiement peut configurer l'enregistreur pour l'envoyer à un emplacement personnalisé, avec des informations personnalisées. Si vous ne faites qu'imprimer, c'est tout ce qu'ils obtiennent.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X