Maison  >  Article  >  développement back-end  >  Exemples d'utilisation de la journalisation dans la bibliothèque standard Python

Exemples d'utilisation de la journalisation dans la bibliothèque standard Python

WBOY
WBOYavant
2022-09-05 17:42:311750parcourir

【Recommandations associées : Tutoriel vidéo Python3

1 Introduction à la journalisation

Logging est une bibliothèque de journalisation couramment utilisée dans la bibliothèque standard Python. Elle stocke les journaux dans différents formats via le module de journalisation. Utilisé pour générer les journaux en cours d'exécution. Vous pouvez définir le niveau de journal de sortie, le chemin d'enregistrement des journaux, la restauration du fichier journal, etc.

2. Exemple d'utilisation simple

Créez d'abord un fichier logger.py, le code qu'il contient est le suivant :

import logging
 
# 1.创建一个logger实例,并且logger实例的名称命名为“single info”,设定的严重级别为DEBUG
LOGGER = logging.getLogger('single info')
LOGGER.setLevel(logging.DEBUG)
 
# 2.创建一个handler,这个主要用于控制台输出日志,并且设定严重级别
ch = logging.StreamHandler()
ch.setLevel(logging.DEBUG)
 
# 3.创建handler的输出格式(formatter)
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
 
# 4.将formatter添加到handler中
ch.setFormatter(formatter)
 
# 5.将handler添加到logger中
LOGGER.addHandler(ch)

Créez un fichier demo.py dans le même répertoire que le fichier logger.py, référencez le fichier précédemment créé instance de logger dans le fichier demo.py Le code est le suivant :

from logger import LOGGER
 
LOGGER.debug("打印DEBUG级别的日志")
LOGGER.info("打印INFO级别的日志")

Exécutez le fichier demo.py le contenu d'entrée dans la console est le suivant :

2022-09-03 17 : 38 :16,554 - info unique - DEBUG - Imprimer les journaux de niveau DEBUG
2022-09-03 17:38:16,555 - info unique - INFO - Imprimer les journaux de niveau INFO

3. Niveau de journalisation

Par défaut, le Le niveau de journalisation est AVERTISSEMENT et le journal est imprimé sur la console. La relation entre la taille du niveau de journal est : CRITIQUE > ERREUR > AVERTISSEMENT > INFO DEBUG > NOTSET

import logging
 
LOGGER = logging.getLogger('single info')
 
LOGGER.error("打印ERROR级别日志")
LOGGER.warning("打印WARNING级别日志")
LOGGER.info("打印INFO级别日志")

Exécutez le code ci-dessus et le contenu de sortie est :

Imprimer le niveau d'ERREUR 
Imprimer le niveau d'AVERTISSEMENT log

Vous pouvez voir que puisque le niveau de journalisation d'INFO est inférieur à AVERTISSEMENT, le journal correspondant n'est pas généré

4 Divers paramètres du format d'impression

%(asctime)s.  : Créez un humain lors de la connexion. L'heure lisible, par défaut, est sous la forme '2022-09-03 17:28:38,073' (le nombre après la virgule est la milliseconde du temps)

%( name)s : représente l'instance du logger Le nom

%(levelname)s : Le niveau de journalisation du log imprimé

%(message)s : Indique le contenu du log

5. Sortez le journal dans le fichier spécifié

Modifiez ce qui précède Le fichier logger.py est modifié comme suit :

import logging
 
# 1、创建一个logger实例,并且logger实例的名称命名为“single info”,设定的严重级别为DEBUG
LOGGER = logging.getLogger('single info')
LOGGER.setLevel(logging.DEBUG)
 
# 2、创建一个handler,用于写入日志文件
fh = logging.FileHandler('test.log',encoding="utf-8", mode="a")
fh.setLevel(logging.WARNING)
 
#3、定义handler的输出格式(formatter)
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(filename)s - %(lineno)d : %(message)s')
 
# 4、给handler添加formatter
fh.setFormatter(formatter)
 
# 5、给logger添加handler
LOGGER.addHandler(fh)

Le code dans le fichier demo.py est :

from logger import LOGGER
 
LOGGER.debug("打印DEBUG级别的日志")
LOGGER.error("打印ERROR级别的日志")

Exécution du fichier demo.py, nous verrons qu'un fichier nommé test.log sera généré sous le répertoire racine du fichier de projet, et le contenu du fichier est :

Imprimer le journal de niveau ERREUR
Imprimer le journal de niveau AVERTISSEMENT

Remarque spéciale : Depuis Le chinois doit être affiché dans le fichier journal, vous devez définir l'encodage lors de la spécification du fichier journal

6. Rollback du journal (rollback en fonction de la taille du fichier)

Modifiez uniquement le fichier logger.py : définissez un RotatingFileHandler. , sauvegardez jusqu'à 3 fichiers journaux, chaque fichier journal peut atteindre 1K

import logging
from logging.handlers import RotatingFileHandler
 
# 1、创建一个logger实例,并且logger实例的名称命名为“single info”,设定的严重级别为DEBUG
LOGGER = logging.getLogger('single info')
LOGGER.setLevel(logging.DEBUG)
 
# 2、定义一个RotatingFileHandler,最多备份3个日志文件,每个日志文件最大1K
rHandler = RotatingFileHandler("log.txt",maxBytes = 1,backupCount = 3,encoding="utf-8", mode="a")
rHandler.setLevel(logging.WARNING)
 
#3、定义handler的输出格式(formatter)
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(filename)s - %(lineno)d : %(message)s')
 
# 4、给handler添加formatter
rHandler.setFormatter(formatter)
 
# 5、给logger添加handler
LOGGER.addHandler(rHandler)

Après avoir exécuté demo.py plusieurs fois, vous pouvez voir que quatre nouveaux fichiers seront ajoutés sous le répertoire racine du projet :

log.txt représente le fichier stocké dans le journal actuel, log.txt.1, log.txt.2 et log.txt.3 représente le fichier de sauvegarde du journal.

7. Restauration du journal (en fonction du temps)

Modifiez simplement le fichier logger.py : définissez un TimedRotatingFileHandler, sauvegardez jusqu'à 3 fichiers journaux et utilisez toutes les 5 secondes comme point d'intervalle d'un fichier journal

import logging
from logging.handlers import TimedRotatingFileHandler
from statistics import mode
 
# 1、创建一个logger实例,并且logger实例的名称命名为“single info”,设定的严重级别为DEBUG
LOGGER = logging.getLogger('single info')
LOGGER.setLevel(logging.DEBUG)
 
# 2、定义一个TimedRotatingFileHandler,最多备份3个日志文件,每隔5秒作为一个日志文件的间隔点
rHandler =TimedRotatingFileHandler(filename="ds_update", when="S", interval=5, backupCount=3,encoding="UTF-8")
rHandler.setLevel(logging.WARNING)
 
# 3、定义handler的输出格式(formatter)
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(filename)s - %(lineno)d : %(message)s')
 
# 4、给handler添加formatter
rHandler.setFormatter(formatter)
 
# 5、给logger添加handler
LOGGER.addHandler(rHandler)

plusieurs fois Après avoir exécuté demo.py, vous pouvez voir que quatre nouveaux fichiers seront ajoutés sous le répertoire racine du projet :

ds_update représente le fichier stocké dans le journal actuel, ds_update.2022-09-03_19 -24-50, ds_update.2022-09-03_19-24-45 et ds_update.2022-09-03_19-24-36 représentent les fichiers de sauvegarde de journaux sont transférés du plus récent au plus lointain dans l'ordre chronologique.

【Recommandation associée : Tutoriel vidéo Python3

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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer