204 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 .

2voto

Floh Points 322

J'ajouterais à tous les autres avantages mentionnés que la fonction d'impression en configuration standard est mise en mémoire tampon. Le flush ne peut avoir lieu qu'à la fin du bloc courant (celui où se trouve l'impression). Ceci est vrai pour tout programme lancé dans un shell non interactif (codebuild, gitlab-ci par exemple) ou dont la sortie est redirigée.

Si, pour une raison quelconque, le programme est tué (kill -9, réinitialisation de l'ordinateur, ), il se peut que vous manquiez une ligne de journal si vous avez utilisé print pour cela.

Cependant, la bibliothèque de journalisation veillera à vider les journaux imprimés sur stderr et stdout immédiatement à chaque appel.

1voto

ticktock Points 108

La journalisation crée essentiellement une base de données en texte brut consultable des sorties d'impression avec d'autres méta-données (horodatage, niveau de journalisation, numéro de ligne, processus, etc.)

C'est de l'or pur, je peux lancer egrep sur le fichier de log. après le python script a été exécuté. Je peux régler ma recherche de motif egrep pour choisir exactement ce qui m'intéresse et ignorer le reste. Cette réduction de la charge cognitive et la liberté de choisir mon modèle egrep plus tard par essai et erreur est le principal avantage pour moi.

tail -f mylogfile.log | egrep "key_word1|key_word2"

Ajoutez à cela d'autres fonctionnalités que l'impression ne peut pas faire (envoi à une socket, définition de niveaux de débogage, logrotate, ajout de métadonnées, etc.

J'ai tendance à utiliser les instructions d'impression parce que c'est facile et paresseux, l'ajout de la journalisation nécessite un peu de code de base, mais nous avons des yasnippets (emacs) et des ultisnips (vim) et d'autres outils de modélisation, alors pourquoi abandonner la journalisation pour de simples instructions d'impression ?

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