Maison > Article > développement back-end > Comment déboguer le code du module de journalisation en Python
Avant de commencer, il convient de noter qu'il existe une structure hiérarchique dans la journalisation, appelée arborescence des journaux ou hiérarchie des loggers. La hiérarchie se compose de plusieurs niveaux, chaque niveau représentant une gravité différente des informations de journal. Les niveaux les plus courants sont :
Créons un module python nomméCRITICAL #Une erreur critique s'est produite, le programme peut ne pas pouvoir continuer à s'exécuter.
ERROR #Une erreur s'est produite qui doit faire l'objet d'une enquête.# 🎜🎜#AVERTISSEMENT #Une indication que quelque chose d'inattendu s'est produit ou un problème dans un avenir proche.
INFO
2. Créez un module
set_logging.py
: import logging logger = logging.getLogger() def set_logger(): logger.setLevel(logging.INFO) handler = logging.StreamHandler() handler.setLevel(logger_level) formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') handler.setFormatter(formatter) logger.addHandler(handler)
getLogger
pour créer une instance de logger, et utilisons setLevel
pour définir le niveau de journalisation (DEBUG
, INFO
code>etc.). La méthode setLevel
du logger agit comme un filtre, qui détermine si un message de journal doit être traité et envoyé au gestionnaire. Par exemple, si nous définissons le niveau de l'enregistreur sur INFO
, alors l'enregistreur n'enverra pas de messages avec un niveau DEBUG
au gestionnaire en raison de leur gravité inférieure au niveau minimum défini sur l'enregistreur. Il envoie uniquement des messages de journal de niveau INFO
ou supérieur (c'est-à-dire WARNING
, ERROR
ou CRITICAL
) à gestionnaire pour le traitement. set_logging.py
的python模块:
import logging from set_logging import set_logger set_logger() logger = logging.getLogger() def roman_number(s: str) -> int: dic = {"I": 1, "V": 5, "X": 10, "L": 50, "C": 100, "D": 500, "M": 1000} res = 0 pre = None for char in s: res += dic.get(char) if dic.get(pre) and dic.get(pre) < dic.get(char): res -= 2 * dic.get(pre) pre = char logger.info("logging is awesome") return res roman_number("IV")
为了明确代码,我们用getLogger
函数创建一个日志器实例,并使用setLevel
来设置日志级别(DEBUG
、INFO
等)。日志器的setLevel
方法就像一个过滤器,它决定了一条日志信息是否应该被处理并发送给处理程序。例如,如果我们将日志记录器的级别设置为INFO
,那么日志记录器就不会向处理程序发送级别为DEBUG
的消息,因为它们的严重程度低于在日志记录器上设置的最低级别。它只将级别为INFO
或更高的日志消息(即WARNING
、ERROR
或CRITICAL
)发送给处理程序进行处理。
我们创建一个StreamHandler
,将日志信息发送到一个流中,如控制台或终端。它被用来输出日志信息以达到调试的目的。我们还为处理程序设置了级别。
我们这样做是因为当处理程序收到来自日志记录器的消息时,它将把这些消息与它的级别进行比较,并在发出之前过滤掉严重程度较低的消息。当我们有不同的处理程序时:
logger.setLevel(logging.INFO)
file_handler = logging.FileHandler()
file_handler.setLevel(logging.ERROR)
console_handler = logging.StreamHandler()
console_handler.setLevel(logging.WARNING)
由于日志记录器的级别被设置为INFO
,它只向两个处理程序发送级别为INFO
或更高的日志消息,但每个处理程序只处理达到或超过其指定日志级别的消息。
回到我们的主要例子,然后我们创建一个格式化器并将其添加到处理程序中。格式化器指定了日志消息的格式,包括时间戳、日志记录器名称、日志级别和消息。最后,我们将处理程序添加到日志记录器中"。
现在在代码中,需要调用set_logger
,如下所示:
运行这段代码,结果如下:
2023-03-04 02:26:57,619 - root - INFO - logging is awesome
级别。一个日志记录器提供了一种方法来为不同类型的消息设置不同的日志级别,如DEBUG
、INFO
、WARNING
、ERROR
和CRITICAL
Nous créons un StreamHandler
pour envoyer les informations de journal à un flux, tel qu'une console ou un terminal. Il est utilisé pour générer des informations de journal à des fins de débogage. Nous définissons également le niveau du gestionnaire.
logger.setLevel(logging.INFO)file_handler = logging.FileHandler()
file_handler.setLevel(logging. ERROR)# 🎜🎜#console_handler = logging.StreamHandler()Puisque le niveau de l'enregistreur est défini sur INFO
, qui envoie uniquement des messages de journal de niveau INFO
ou supérieur aux deux gestionnaires, mais chaque gestionnaire ne gère que les messages qui atteignent ou dépassent son niveau de journalisation spécifié.
2023-03-04 02:26:57,619 - root - INFO - logging est génial#🎜🎜 #三、Avantages de l'utilisation des journaux
DEBUG
, INFO
, WARNING
, ERROR et CRITICAL. Cela facilite le filtrage et la priorisation des messages de journal en fonction de leur gravité. Bien sûr, l'impression peut imiter le même comportement que la journalisation, mais cela nécessite plus de travail de codage. . Pas aussi flexible que la journalisation #🎜🎜##🎜🎜##🎜🎜##🎜🎜##🎜🎜#Performance#🎜🎜# L'impression des informations de journalisation peut être plus lente que l'utilisation d'un enregistreur, en particulier lors du traitement de grandes quantités de données. ou fréquemment lors de la connexion. #🎜🎜##🎜🎜##🎜🎜##🎜🎜##🎜🎜#Configurabilité#🎜🎜# Les enregistreurs fournissent un moyen de configurer le comportement de journalisation d'une application, les destinations de journalisation et. formats de journaux sans modifier le code source, ce qui facilite la gestion et le maintien du comportement de journalisation au fil du temps. #Flexibilité#🎜🎜# Le logger vous permet d'envoyer des messages de journal à plusieurs destinations telles que la console, le fichier ou la base de données. et les analyser #🎜🎜## 🎜🎜##🎜🎜#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!