Comment puis-je enregistrer les exceptions non gérées en Python à l'aide du module de journalisation ?

Barbara Streisand
Libérer: 2024-10-23 00:10:03
original
751 Les gens l'ont consulté

How Can I Log Unhandled Exceptions in Python Using the Logging Module?

Consignation des exceptions non interceptées en Python

À moins qu'elles ne soient explicitement gérées, les exceptions Python sont générées par défaut dans le flux d'erreurs standard du programme (stderr). Cependant, il peut y avoir des cas où il est préférable que les exceptions non interceptées soient enregistrées à l'aide du module de journalisation.

L'approche traditionnelle de la journalisation des exceptions non interceptées consiste à utiliser manuellement la méthode logging.exception(e) dans un bloc except. , comme démontré ci-dessous :

<code class="python">try:
    raise Exception, 'Throwing a boring exception'
except Exception, e:
    logging.exception(e)</code>
Copier après la connexion

Cependant, l'appel automatique de logging.exception(...) pour chaque exception non interceptée élimine l'étape manuelle.

Implémentation

Considérez les extrait de code suivant :

<code class="python">import sys
import logging

# Custom logger with handler for stdout
logger = logging.getLogger(__name__)
handler = logging.StreamHandler(stream=sys.stdout)
logger.addHandler(handler)

# Custom exception handler to log uncaught exceptions
def handle_exception(exc_type, exc_value, exc_traceback):
    # Ignore KeyboardInterrupt for Ctrl + C exit
    if issubclass(exc_type, KeyboardInterrupt):
        sys.__excepthook__(exc_type, exc_value, exc_traceback)
        return

    logger.error("Uncaught exception", exc_info=(exc_type, exc_value, exc_traceback))

# Assign custom exception handler
sys.excepthook = handle_exception

if __name__ == "__main__":
    raise RuntimeError("Test unhandled")</code>
Copier après la connexion

Ce script modifié accomplit plusieurs tâches clés :

  • Journalisation personnalisée : Utilisation du module de journalisation pour formater et enregistrer les exceptions non interceptées.
  • Gestion de sortie standard : Diriger les exceptions vers la sortie standard à l'aide d'un gestionnaire personnalisé, en veillant à ce qu'elles soient affichées dans la fenêtre de la console.
  • Gestion sélective des exceptions : Ignorer les exceptions KeyboardInterrupt pour maintenir une sortie de console gracieuse via Ctrl C.

En remplaçant le gestionnaire d'exceptions par défaut par handle_exception, les exceptions non interceptées sont automatiquement enregistrées à l'aide de l'enregistreur configuré, améliorant ainsi la visibilité et facilitant le débogage.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!