-Il était question de vouloir séparer les fichiers journaux pour chaque niveau de journal en Python. ・ En premier lieu, j'ai utilisé la bibliothèque de journalisation à la hâte et je ne l'ai pas bien comprise.
Résolvons le problème en bougeant nos mains et en organisant.
import logging
logging.basicConfig(format='%(asctime)s %(message)s', datefmt='%m/%d/%Y', filename = './basic.log')
logging.warning('basic.Enregistré dans le journal avec la date.')
logging.basicConfig(filename = './not-appeared.log')
logging.warning('basicConfig ne fonctionne que la première fois après le démarrage, donc pas-appeared.Aucun journal n'est généré.')
root_logger = logging.getLogger('')
root_logger.setLevel(logging.ERROR)
root_logger.error('Un enregistreur racine a été configuré pour enregistrer les niveaux d'ERREUR et plus. de base.Il continuera à apparaître dans le journal. Je n'ai pas spécifié de gestionnaire, donc je ne trouve rien d'autre.')
root_logger.addHandler(logging.StreamHandler())
root_logger.error('Cela apparaîtra sur la console. Le format spécifié dans basicConfig est ignoré.')
root_logger.warning('Le niveau de journalisation étant faible, il n'apparaît pas sur la console. Si ignoré, basique.Il n'apparaît pas dans le journal.')
critical_handler = logging.FileHandler('./critical.log')
critical_handler.setLevel(logging.CRITICAL)
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
critical_handler.setFormatter(formatter)
root_logger.addHandler(critical_handler)
root_logger.critical('Ajout d'un gestionnaire qui enregistre uniquement CRITICAL. Date et nom du niveau ajoutés.')
root_logger.error('Bien que cela apparaisse sur la console, il est essentiel car le niveau de journalisation est bas.Il n'apparaît pas dans le journal.')
second_logger = logging.getLogger('second')
second_logger.setLevel(logging.WARNING)
second_logger.addHandler(logging.StreamHandler())
second_logger.warning('Ajoutez un enregistreur et placez-le sur la console. de base.En plus du journal, il apparaît deux fois sur la console avec l'enregistreur racine.')
second_logger.propagate = False
second_logger.warning('Si vous refusez la propagation, elle ne sera pas transmise en amont, c'est la seconde_Un seul enregistreur est disponible.')
・ Il peut être hérité en plusieurs étapes en fonction de l'enregistreur racine. -Plusieurs gestionnaires peuvent être définis pour chacun. -Les niveaux de journal peuvent être définis pour les enregistreurs et les gestionnaires respectivement. -Cependant, comme les deux sont des seuils inférieurs, il n'est pas possible de filtrer uniquement des journaux spécifiques selon les besoins.
Si vous utilisez un filtre, vous pouvez filtrer en appelant un enregistrement de journal (une instance d'un message de journal) comme argument et en renvoyant une valeur booléenne chaque fois que vous vous connectez.
J'ai fait référence à ce post de Stack Overflow. Comme le dit le n ° 1, je suis d'accord que l'extraction d'un seul niveau spécifique ne le rendra pas lisible par les humains.
python logging specific level only
log_file_by_level.py
import logging
class LoggingFilter(object):
"""Filtre qui ne laisse qu'un niveau de journal spécifique"""
def __init__(self, level):
self.__level = level
def filter(self, logRecord):
#Supprimez le paramètre de niveau du gestionnaire et ici== self.__Il devrait être possible de le mettre à niveau.
return logRecord.levelno <= self.__level
def set_handler(loglevel, filename):
#Format de journal commun
log_format = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s', datefmt='%Y-%m-%d %H:%M:%S')
handler = logging.FileHandler(filename)
handler.setLevel(loglevel)
handler.setFormatter(log_format)
handler.addFilter(LoggingFilter(loglevel))
logger.addHandler(handler)
logger = logging.getLogger(__name__)
#Spécifiez le niveau minimum à enregistrer dans l'application.
logger.setLevel(logging.DEBUG)
set_handler(logging.WARN, './warning.log')
set_handler(logging.INFO, './info.log')
main.py
from log_file_by_level import logger
logger.warning('I warn you.')
logger.info('Please be informed that this is just a test.')
logger.error('Found error on your smile.')
・ Niveau spécifique de journalisation Python uniquement ・ Logging HOWTO - Document Python 3.6.1