logo

Connexion en Python

La journalisation est un moyen de suivre les événements qui se produisent lors de l'exécution de certains logiciels. La journalisation est importante pour le développement, le débogage et l’exécution de logiciels. Si vous n’avez aucun enregistrement de journalisation et que votre programme plante, il y a très peu de chances que vous détectiez la cause du problème. Et si vous en détectez la cause, cela prendra beaucoup de temps. Avec la journalisation, vous pouvez laisser un fil d'Ariane afin que, en cas de problème, nous puissions déterminer la cause du problème.

Il existe un certain nombre de situations, par exemple si vous attendez un nombre entier, on vous a donné un flottant et vous pouvez obtenir un nuage. API , le service est en panne pour maintenance, et bien plus encore. De tels problèmes sont hors de contrôle et difficiles à déterminer.



Pourquoi l'instruction print n'est pas pythonique

Certains développeurs utilisent le concept d'impression des instructions pour valider si les instructions sont exécutées correctement ou si une erreur s'est produite. Mais imprimer n’est pas une bonne idée. Cela peut résoudre vos problèmes pour les scripts simples, mais pour les scripts complexes, l'approche d'impression échouera.
Python a un module intégré enregistrement qui permet d'écrire des messages d'état dans un fichier ou dans tout autre flux de sortie. Le fichier peut contenir des informations sur la partie du code qui est exécutée et les problèmes survenus.

Niveaux de journalisation Python

Il existe cinq niveaux intégrés de message de journal.

  • Déboguer: Ceux-ci sont utilisés pour fournir des informations détaillées, généralement intéressantes uniquement lors du diagnostic des problèmes.
  • Info: Ceux-ci sont utilisés pour confirmer que les choses fonctionnent comme prévu
  • Avertissement: Ceux-ci sont utilisés pour indiquer que quelque chose d'inattendu s'est produit ou pour indiquer un problème dans un avenir proche.
  • Erreur: Cela indique qu'en raison d'un problème plus grave, le logiciel n'a pas pu exécuter certaines fonctions.
  • Critique: Cela indique une erreur grave, indiquant que le programme lui-même pourrait ne pas être en mesure de continuer à s'exécuter.

Si nécessaire, les développeurs ont la possibilité de créer plus de niveaux, mais ceux-ci sont suffisants pour gérer toutes les situations possibles. Chaque niveau intégré s'est vu attribuer sa valeur numérique.



Le module de journalisation est doté de plusieurs fonctionnalités. Il possède plusieurs constantes, classes et méthodes. Les éléments en majuscules sont des constantes, les éléments en majuscules sont des classes et les éléments qui commencent par des lettres minuscules sont des méthodes.

Il existe plusieurs objets enregistreur proposés par le gestionnaire de base lui-même.



  • Logger.info (msg) : Cela enregistrera un message avec le niveau INFO sur cet enregistreur.
  • Logger.avertissement (msg): Cela enregistrera un message avec un niveau AVERTISSEMENT sur cet enregistreur.
  • Logger.erreur (msg): Cela enregistrera un message avec le niveau ERREUR sur cet enregistreur.
  • Logger.critique (msg): Cela enregistrera un message avec le niveau CRITICAL sur cet enregistreur.
  • Logger.log(lvl,msg) : Cela enregistrera un message avec un niveau de niveau entier sur cet enregistreur.
  • Logger.exception (msg): Cela enregistrera un message avec le niveau ERREUR sur cet enregistreur.
  • Logger.setLevel(niveau) : Cette fonction définit le seuil de cet enregistreur sur lvl. Cela signifie que tous les messages en dessous de ce niveau seront ignorés.
  • Logger.addFilter(filt) : Cela ajoute un filtre spécifique adapté à cet enregistreur.
  • Logger.removeFilter(filt): Cela supprime un filtre spécifique adapté à cet enregistreur.
  • Logger.filter (enregistrement): Cette méthode applique le filtre de l'enregistreur à l'enregistrement fourni et renvoie True si l'enregistrement doit être traité. Sinon, il renverra False.
  • Logger.addHandler (hdlr) : Cela ajoute un gestionnaire spécifique hdlr à cet enregistreur.
  • Logger.removeHandler(hdlr) : Cela supprime un gestionnaire spécifique hdlr dans cet enregistreur.
  • Logger.hasHandlers() : Cela vérifie si l'enregistreur a un gestionnaire configuré ou non.

Gestionnaires utiles

En plus de la classe Handler de base, de nombreuses sous-classes utiles sont fournies.

Gestionnaire

Description

Gestionnaire de flux Envoie des messages aux flux (objets de type fichier).
Gestionnaire de fichiers Envoie des messages aux fichiers disque.
BaseRotatingHandler Classe de base pour les gestionnaires qui effectuent une rotation des fichiers journaux à un moment donné. Utiliser Gestionnaire de fichiers rotatif ou TimedRotatingFileHandler plutôt.
Gestionnaire de fichiers rotatif Envoie des messages aux fichiers disque, avec prise en charge de la taille maximale des fichiers journaux et de la rotation des fichiers journaux.
TimedRotatingFileHandler Envoie des messages aux fichiers disque, en faisant tourner le fichier journal à certains intervalles de temps.
Gestionnaire de sockets Envoie des messages aux sockets TCP/IP. Prend également en charge les sockets de domaine Unix depuis Python 3.4.
Gestionnaire de datagrammes Envoie des messages aux sockets UDP. Prend également en charge les sockets de domaine Unix depuis Python 3.4.
Gestionnaire SMTP Envoie des messages à une adresse e-mail désignée.
SysLogHandler Envoie des messages à un démon Unix Syslogthe, éventuellement sur une machine distante.
NTEventLogHandler Envoie des messages à un journal des événements Windows NT/2000/XP.
Gestionnaire de mémoire Envoie des messages à un tampon en mémoire, qui est vidé chaque fois que des critères spécifiques sont remplis.
Gestionnaire HTTP Envoie des messages à un serveur HTTP en utilisant la sémantique GET ou POST.
Gestionnaire de fichiers surveillés Surveille le fichier auquel il se connecte. Si le fichier change, il est fermé et rouvert en utilisant le nom du fichier.
Gestionnaire de files d'attente Envoie des messages à une file d'attente, tels que ceux implémentés dans la file d'attente ou les modules multitraitements.
Gestionnaire Null Ne fait rien avec les messages d'erreur. Utilisé par les développeurs de bibliothèques pour éviter le message « Aucun gestionnaire n'a pu être trouvé pour l'enregistreur ».

Bases de la journalisation Python

Les bases de l'utilisation du module de journalisation pour enregistrer les événements dans un fichier sont très simples. Pour cela, importez simplement le module depuis la bibliothèque.

  1. Créez et configurez l'enregistreur. Il peut avoir plusieurs paramètres. Mais surtout, transmettez le nom du fichier dans lequel vous souhaitez enregistrer les événements.
  2. Ici, le format de l'enregistreur peut également être défini. Par défaut, le fichier fonctionne dans ajouter mode mais nous pouvons changer cela en mode écriture si nécessaire.
  3. En outre, le niveau de l'enregistreur peut être défini, qui agit comme seuil de suivi en fonction des valeurs numériques attribuées à chaque niveau.
    Plusieurs attributs peuvent être transmis en tant que paramètres.
  4. La liste de tous ces paramètres est donnée dans Bibliothèque Python . L'utilisateur peut choisir l'attribut requis en fonction des besoins.
    Après cela, créez un objet et utilisez les différentes méthodes comme indiqué dans l'exemple.

Enregistrer une variable

Ce code montre comment enregistrer un message d'erreur. La fonction logging.error() est utilisée pour enregistrer un message d'erreur avec un espace réservé %s pour le nom de la variable.

Python3




import> logging> name>=> 'GFG'> logging.error(>'%s raised an error'>, name)>

>

sélectionner parmi plusieurs tables en SQL

>

Sortir :

ERROR:root:GFG raised an error>

Journalisation de tous les niveaux

Ce code montre tous les niveaux de journalisation.

Python




# importing module> import> logging> # Create and configure logger> logging.basicConfig(filename>=>'newfile.log'>,> >format>=>'%(asctime)s %(message)s'>,> >filemode>=>'w'>)> # Creating an object> logger>=> logging.getLogger()> # Setting the threshold of logger to DEBUG> logger.setLevel(logging.DEBUG)> # Test messages> logger.debug(>'Harmless debug Message'>)> logger.info(>'Just an information'>)> logger.warning(>'Its a Warning'>)> logger.error(>'Did you try to divide by zero'>)> logger.critical(>'Internet is down'>)>

>

>

Le code ci-dessus générera un fichier avec le nom fourni et si nous ouvrons le fichier, le fichier contient les données suivantes.

Bases de la journalisation Python

Configuration de la journalisation

Connexion à un fichier : temp.conf

[loggers] keys=root,simpleExample [handlers] keys=consoleHandler [formatters] keys=simpleFormatter [logger_root] level=DEBUG handlers=consoleHandler [logger_simpleExample] level=DEBUG handlers=consoleHandler qualname=simpleExample propagate=0 [handler_consoleHandler]>

Exemple:

Le code met en place un système de journalisation en utilisant la configuration du temp.conf déposer. Il obtient un enregistreur nommé exemple simple et enregistre les messages avec différents niveaux de journalisation.

Python3

texte en gras CSS


itération de la carte Java



import> logging> import> logging.config> logging.config.fileConfig(>'temp.conf'>)> # create logger> logger>=> logging.getLogger(>'simpleExample'>)> # 'application' code> logger.debug(>'debug message'>)> logger.info(>'info message'>)> logger.warning(>'warn message'>)> logger.error(>'error message'>)> logger.critical(>'critical message'>)>

>

>

Sortir :

2023-06-15 18:16:21 - simpleExample - DEBUG - debug message 2023-06-15 18:16:21 - simpleExample - INFO - info message 2023-06-15 18:16:21 - simpleExample - WARNING - warn message 2023-06-15 18:16:21 - simpleExample - ERROR - error message 2023-06-15 18:16:21 - simpleExample - CRITICAL - critical message>

Exception de journalisation Python

La génération d'exceptions lors de la journalisation peut être utile dans certains scénarios pour indiquer des conditions exceptionnelles ou des erreurs dans votre application. En déclenchant une exception, vous pouvez interrompre le flux normal d'exécution et informer l'appelant ou le système de journalisation du problème rencontré.

Dans ce code, nous générons une exception qui est interceptée par la journalisation. exception.

Python3




import> logging> logging.basicConfig(level>=>logging.DEBUG,> >format>=>'%(asctime)s - %(levelname)s - %(message)s'>)> def> perform_operation(value):> >if> value <>0>:> >raise> ValueError(>'Invalid value: Value cannot be negative.'>)> >else>:> ># Continue with normal execution> >logging.info(>'Operation performed successfully.'>)> try>:> >input_value>=> int>(>input>(>'Enter a value: '>))> >perform_operation(input_value)> except> ValueError as ve:> >logging.exception(>'Exception occurred: %s'>,>str>(ve))>

>

>

Sortir :

Enter a value: -1 2023-06-15 18:25:18,064 - ERROR - Exception occurred: Invalid value: Value cannot be negative. ValueError: Invalid value: Value cannot be negative.>