Maison  >  Article  >  développement back-end  >  Résumé de l'utilisation des bibliothèques de journalisation en python

Résumé de l'utilisation des bibliothèques de journalisation en python

黄舟
黄舟original
2017-10-18 11:02:111681parcourir

Le module de journalisation de Python fournit un système de journalisation général, qui peut être utilisé par des modules ou des applications tiers. L'article suivant vous présente principalement un résumé des connaissances sur l'utilisation des bibliothèques de journalisation en Python. code, les amis dans le besoin peuvent s'y référer, jetons un coup d'œil ci-dessous.

Préface

Récemment, en raison de besoins professionnels, j'ai écrit des scripts python Il semble très faible de toujours utiliser print pour imprimer. informations, j'ai donc pris le temps. J'ai étudié la bibliothèque de journalisation de python pour imprimer et enregistrer les journaux avec élégance. Je n'entrerai pas dans plus de détails ci-dessous, jetons un œil à l'introduction détaillée.

1. Imprimez simplement le journal à l'écran :


import logging

logging.debug('This is debug message')  #debug
logging.info('This is info message')   #info
logging.warning('This is warning message') #warn

Écran Imprimer sur : WARNING:root:This is warning message

Par défaut, les journaux de niveau AVERTISSEMENT seront imprimés

  • DEBUG : informations détaillées, informations de débogage.

  • INFO : Confirme que tout fonctionne comme prévu.

  • AVERTISSEMENT : indique que quelque chose d'inattendu s'est produit ou qu'un problème surviendra dans un avenir proche (comme « disque plein »). Le logiciel fonctionne toujours normalement.

  • ERREUR : En raison de problèmes plus graves, le logiciel ne peut plus exécuter certaines fonctions.

  • CRITIQUE : Une erreur grave indiquant que le logiciel ne peut plus fonctionner.

2. Configurez le format et la méthode de saisie du journal via la fonction basicConfig


import logging

logging.basicConfig(level=logging.DEBUG,
    format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s',
    datefmt='%Y-%m-%d %a %H:%M:%S',
    filename='test.log',
    filemode='w')
 
logging.debug('This is debug message')
logging.info('This is info message')
logging.warning('This is warning message')

Le code ci-dessus n'imprimera pas le journal à l'écran, mais générera le fichier journal test.log dans le répertoire courant. Le journal est imprimé dans le fichier journal :

<.>2017-10-16 lun 10:05:17 testlogging.py[line:25] DEBUG Ceci est un message de débogage


2017-10-16 lun 10:05:17 testlogging.py[ line :26] INFO Ceci est un message d'information


2017-10-16 Lun 10:05:17 testlogging.py[line:27] AVERTISSEMENT Ceci est un message d'avertissement

  • Paramètres de la fonction logging.basicConfig :

  • filename : Précisez le nom du fichier log

  • filemode : Même signification que le fonction de fichier, spécifiez le mode d'ouverture du fichier journal, le format 'w' ou 'a'

  •  : Spécifiez le format de sortie et le format peut générer de nombreuses informations utiles, comme indiqué dans. l'exemple ci-dessus :


 %(levelno)s: 打印日志级别的数值
 %(levelname)s: 打印日志级别名称
 %(pathname)s: 打印当前执行程序的路径,其实就是sys.argv[0]
 %(filename)s: 打印当前执行程序名
 %(funcName)s: 打印日志的当前函数
 %(lineno)d: 打印日志的当前行号
 %(asctime)s: 打印日志的时间
 %(thread)d: 打印线程ID
 %(threadName)s: 打印线程名称
 %(process)d: 打印进程ID
 %(message)s: 打印日志信息
  • datefmt : Spécifie le format de l'heure, identique à time.strftime()

  • level : Définissez le niveau de journalisation, la valeur par défaut est la journalisation. AVERTISSEMENT

  • stream : Spécifiez le flux de sortie du journal, vous pouvez spécifier le sortie vers sys.stderr, sys.stdout ou un fichier, la sortie par défaut est vers stderr, lorsque le flux et le nom de fichier sont spécifiés en même temps, le flux est ignoré

3. Affichez le journal à l'écran et le fichier journal en même temps


Insérez le code ci-dessus pour imprimer le log sur l'écran en même temps
#定义一个StreamHandler,将INFO级别或更高的日志信息打印到标准错误,并将其添加到当前的日志处理对象
console = logging.StreamHandler()
console.setLevel(logging.INFO)
formatter = logging.Formatter(&#39;%(name)-12s: %(levelname)-8s %(message)s&#39;)
console.setFormatter(formatter)
logging.getLogger(&#39;&#39;).addHandler(console)


Imprimer sur l'écran :


root : INFO Ceci est un message d'information


root : AVERTISSEMENT Ceci est un message d'avertissement


Imprimer dans le fichier :


2017- 10-16 Lun 10:20:07 testlogging.py[line:46] DEBUG This est un message de débogage


2017-10-16 Lun 10:20:07 testlogging.py[line:47] INFO Ceci est un message d'information


2017-10-16 Lun 10:20:07 testlogging.py[line:48] AVERTISSEMENT Ceci est un message d'avertissement

4. Configurez les journaux via les fichiers de configuration


Format du journal
#logger.conf
[loggers]
#定义logger模块,root是父类,必需存在的,其它的是自定义。 
keys=root,infoLogger,warnlogger

[logger_root] 
level=DEBUG       #level  级别,级别有DEBUG、INFO、WARNING、ERROR、CRITICAL
handlers=infohandler,warnhandler #handlers 处理类,可以有多个,用逗号分开

[logger_infoLogger]     #[logger_xxxx] logger_模块名称
handlers=infohandler
qualname=infoLogger     #qualname logger名称,应用程序通过 logging.getLogger获取。对于不能获取的名称,则记录到root模块。
propagate=0       #propagate 是否继承父类的log信息,0:否 1:是

[logger_warnlogger]
handlers=warnhandler
qualname=warnlogger
propagate=0

###############################################
#定义handler
[handlers]
keys=infohandler,warnhandler

[handler_infohandler]
class=StreamHandler     #class handler类名
level=INFO       #level 日志级别
formatter=form02      #formatter,下面定义的formatter
args=(sys.stdout,)     #args handler初始化函数参数

[handler_warnhandler]
class=FileHandler
level=WARN
formatter=form01
args=(&#39;logs/deploylog.log&#39;, &#39;a&#39;)

###############################################
# 定义格式化输出
[formatters]
keys=form01,form02

[formatter_form01]
format=%(message)s %(asctime)s
datefmt=%Y-%m-%d %H:%M:%S

[formatter_form02]
format=%(asctime)s %(levelname)s %(message)s
datefmt=%Y-%m-%d %H:%M:%S


    %(asctime)s année-mois-jour heure-minute-seconde, milliseconde 2013 -04-26 20:10:43,745
  • Nom de fichier de %(filename), à ​​l'exclusion du nom de répertoire de Directory
  • %(pathname)s , chemin complet
  • Nom de la fonction %(funcName)s
  • Nom du niveau %(levelname)
  • %(lineno)d numéro de ligne
  • %(module)s nom du module
  • %(message)s corps du message
  • %(name)s nom du module de journalisation
  • %(process)d identifiant de processus
  • % Nom du processus de (processName)
  • %(thread)d identifiant du fil
  • Nom du fil de discussion %(threadName)
  • Fichier de configuration de test


from logging.config import fileConfig

fileConfig(&#39;logger.conf&#39;)
logger=logging.getLogger(&#39;infoLogger&#39;)
logger.info(&#39;test1&#39;)
logger_error=logging.getLogger(&#39;warnhandler&#39;)
logger_error.warn(&#39;test5&#39;)

Résumé

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:
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