Maison > Article > développement back-end > A quoi sert le module de journalisation en python ? Introduction à l'utilisation du module de journalisation
Le contenu de cet article concerne à quoi sert le module de journalisation en python ? L'introduction à l'utilisation du module de journalisation a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer. J'espère qu'il vous sera utile.
Le module de journalisation est un module intégré fourni avec Python, fournissant une interface de journalisation standard
Liste des niveaux de journalisation
enregistreur : générer des journaux Object
Filter : objet pour filtrer les journaux
Handler : reçoit les journaux et contrôle ensuite l'impression à différents endroits. FileHandler est utilisé pour imprimer dans des fichiers, StreamHandler est utilisé pour imprimer sur le terminal
Formatter : différent. les journaux peuvent être un objet de format personnalisé, puis le lier à différents objets Handler pour contrôler les formats de journaux de différents gestionnaires
Exemples de code sur la façon d'utiliser plusieurs objets :
'''critical=50 error =40 warning =30 info = 20 debug =10''' import logging #1、logger对象:负责产生日志,然后交给Filter过滤,然后交给不同的Handler输出logger=logging.getLogger(__file__) #2、Filter对象:不常用,略 #3、Handler对象:接收logger传来的日志,然后控制输出h1=logging.FileHandler('t1.log') #打印到文件h2=logging.FileHandler('t2.log') #打印到文件h3=logging.StreamHandler() #打印到终端 #4、Formatter对象:日志格式formmater1=logging.Formatter('%(asctime)s - %(name)s - %(levelname)s -%(module)s: %(message)s', datefmt='%Y-%m-%d %H:%M:%S %p',) formmater2=logging.Formatter('%(asctime)s : %(message)s', datefmt='%Y-%m-%d %H:%M:%S %p',) formmater3=logging.Formatter('%(name)s %(message)s',) #5、为Handler对象绑定格式h1.setFormatter(formmater1) h2.setFormatter(formmater2) h3.setFormatter(formmater3) #6、将Handler添加给logger并设置日志级别logger.addHandler(h1) logger.addHandler(h2) logger.addHandler(h3) logger.setLevel(10) #7、测试logger.debug('debug') logger.info('info') logger.warning('warning') logger.error('error') logger.critical('critical')
Remarque : Log Il sera filtré d'abord par le logger, puis par l'objet Handler. Lorsque le niveau de journalisation est défini pour l'objet Handler et l'objet logger en même temps, le niveau de journalisation final sera défini en fonction du niveau le plus élevé des deux <.>
qui peut être trouvé dans logging.basicConfig() Le comportement par défaut du module de journalisation peut être modifié via des paramètres spécifiques dans la fonction. Les paramètres disponibles sontfilename : Créez un FiledHandler avec le nom de fichier spécifié, afin que le journal soit stocké dans le fichier spécifié.
filemode : La méthode d'ouverture du fichier, spécifiée dans Ce paramètre est utilisé lorsque le nom de fichier est spécifié. La valeur par défaut est "a" et peut également être spécifiée comme "w".
format : Spécifiez le format d'affichage du journal utilisé par le gestionnaire
datefmt : Spécifiez le format de la date et de l'heure
level : Définissez le niveau de journalisation du rootlogger
stream : Créez un StreamHandler avec le flux spécifié. Vous pouvez spécifier la sortie vers sys.stderr, sys.stdout ou un fichier. La valeur par défaut est sys.stderr. Si les paramètres de nom de fichier et de flux sont répertoriés en même temps, le paramètre de flux sera ignoré.
%(created)f L'heure actuelle, au standard UNIX Un nombre à virgule flottante représentant l'heure %(relativeCreated)d Le nombre de millisecondes depuis la création du Logger lors de la sortie des informations du journal %(asctime)s L'heure actuelle sous forme de chaîne. Le format par défaut est "2003-07-08 16:49:45,896". Ce qui suit la virgule est l'identifiant du fil de discussion en millisecondes%(thread)d. Il se peut qu'il n'y ait aucun nom de fil de discussion %(threadName)s. Il se peut qu’il n’y ait pas d’ID de processus %(process)d. Il se peut qu'il n'y ait pas de message de sortie utilisateur de %(message)sVous trouverez ci-joint un modèle de journal qui peut être utilisé directement :
""" logging配置 """ import os import logging.config # 定义三种日志输出格式 开始 standard_format = '[%(asctime)s][%(threadName)s:%(thread)d][task_id:%(name)s][%(filename)s:%(lineno)d]' \ '[%(levelname)s][%(message)s]' #其中name为getlogger指定的名字 simple_format = '[%(levelname)s][%(asctime)s][%(filename)s:%(lineno)d]%(message)s' id_simple_format = '[%(levelname)s][%(asctime)s] %(message)s' # 定义日志输出格式 结束 logfile_dir = os.path.dirname(os.path.abspath(__file__)) # log文件的目录 logfile_name = 'all2.log' # log文件名 # 如果不存在定义的日志目录就创建一个 if not os.path.isdir(logfile_dir): os.mkdir(logfile_dir) # log文件的全路径 logfile_path = os.path.join(logfile_dir, logfile_name) # log配置字典 LOGGING_DIC = { 'version': 1, 'disable_existing_loggers': False, 'formatters': { 'standard': { 'format': standard_format }, 'simple': { 'format': simple_format }, }, 'filters': {}, 'handlers': { #打印到终端的日志 'console': { 'level': 'DEBUG', 'class': 'logging.StreamHandler', # 打印到屏幕 'formatter': 'simple' }, #打印到文件的日志,收集info及以上的日志 'default': { 'level': 'DEBUG', 'class': 'logging.handlers.RotatingFileHandler', # 保存到文件 'formatter': 'standard', 'filename': logfile_path, # 日志文件 'maxBytes': 1024*1024*5, # 日志大小 5M 'backupCount': 5, 'encoding': 'utf-8', # 日志文件的编码,再也不用担心中文log乱码了 }, }, 'loggers': { #logging.getLogger(__name__)拿到的logger配置 # 这里的logger对象名字为''是为了getLogger()获取不同的日志对象时能获取相同的配置,当想要让不同的日志对象有不同的配 # 置时,可在这里添加logger对象 # 当getLogger()获取的logger对象名称不存在时,如果存在key=''的配置,则使用默认key=''的配置 '': { 'handlers': ['default', 'console'], # 这里把上面定义的两个handler都加上,即log数据既写入文件又打印到屏幕 'level': 'DEBUG', 'propagate': True, # 向上(更高level的logger)传递 }, }, } def load_my_logging_cfg(event_log): logging.config.dictConfig(LOGGING_DIC) # 导入上面定义的logging配置 # logger = logging.getLogger(__name__) # 生成一个log实例 # logger.info(event_log) # 记录事件的日志Test :
""" MyLogging Test """ import time import logging import my_logging # 导入自定义的logging配置 logger = logging.getLogger(__name__) # 生成logger实例 def demo(): logger.debug("start range... time:{}".format(time.time())) logger.info("中文测试开始。。。") for i in range(10): logger.debug("i:{}".format(i)) time.sleep(0.2) else: logger.debug("over range... time:{}".format(time.time())) logger.info("中文测试结束。。。") if __name__ == "__main__": my_logging.load_my_logging_cfg() # 在你程序文件的入口加载自定义logging配置 demo()Recommandations associées :
Utiliser le module de journalisation en Python au lieu d'imprimer (un guide concis de la journalisation)
Utilisation du module de journalisation dans Python Exemple
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!