Maison > Article > développement back-end > Explication détaillée de l'implémentation par Python de la fonction d'impression Logger
J'ai récemment rencontré le besoin d'imprimer au travail. En recherchant des informations pertinentes, j'ai découvert que Logger en Python peut très bien implémenter l'impression, donc l'article suivant vous présente principalement les informations pertinentes sur la façon dont Python implémente la fonction d'impression Logger. . Dans l'article L'introduction via un exemple de code est très détaillée, les amis dans le besoin peuvent s'y référer.
Préface
Comme nous le savons tous, il existe une suite appelée logging en Python spécifiquement pour l'impression de l'enregistreur, mais l'enregistreur de cette suite uniquement reçoit un type de chaîne. L'enregistreur imprime les informations. Par conséquent, nous devons concaténer les informations à imprimer dans une chaîne à l'avance avant de les utiliser, ce qui n'est pas bon pour la propreté du code.
Basé sur la journalisation, j'ai implémenté un outil d'impression d'enregistreur similaire à la connexion de Java. L'implémentation est relativement simple et peut gérer certains besoins simples d'impression d'enregistreur. J'espère qu'il sera utile à tout le monde. Pas grand chose à dire ci-dessous, jetons un œil à l'introduction détaillée :
LoggerFactory
Cette classe est utilisée pour générer des loggers pour d'autres appels instances de classes et enregistrez ces instances.
''' Created on 2017年7月20日 Logger工厂,保存每个类的Logger实例 ''' from slient.bigdata.common.logger import Logger import logging class LoggerFactory : LOG_FILENAME='bigdata_python.log' #logger保存文件 TYPE = "CONSOLE" #logger打印类型 #TYPE = "FILE" LEVEL = logging.DEBUG #logger级别 #LEVEL = logging.INFO loggerDict = {} #对外部开放的Logger调用方法 @staticmethod def getLogger(className) -> Logger: if className in LoggerFactory.loggerDict.keys() : logger = LoggerFactory.loggerDict[className] if not logger : logger = LoggerFactory.__initLogger(className) else : logger = LoggerFactory.__initLogger(className) return logger #生成Logger实例 @staticmethod def __initLogger(className) -> Logger: logger = logging.getLogger(className) # 设置logger的level为DEBUG logger.setLevel(LoggerFactory.LEVEL) #设置Logger格式 formatter = logging.Formatter('[%(asctime)s] [%(name)s] [%(levelname)s]: %(message)s') if LoggerFactory.TYPE == 'CONSOLE' : # 创建输出日志到控制台的StreamHandler handler = logging.StreamHandler() else : # 创建输出日志到文件Handler handler = logging.FileHandler(LoggerFactory.LOG_FILENAME) #添加格式 handler.setFormatter(formatter) # 给logger添加上handler logger.addHandler(handler) localLogger = Logger(logger) LoggerFactory.loggerDict[className] = localLogger return localLogger
Logger
Cette classe implémente principalement certaines méthodes de journalisation Le packaging est relativement simple.
''' Created on 2017年7月5日 日志处理 ''' import logging import string class Logger : def __init__(self, logger : logging): self.logger = logger def info(self, formatStr:string, *objs): self.logger.info(formatStr.format(*objs)) def debug(self, formatStr:string, *objs): self.logger.debug(formatStr.format(*objs)) def error(self, formatStr:string, *objs): self.logger.error(formatStr.format(*objs))
Tests
logger = LoggerFactory.getLogger("Test") logger.info("打印log1:{}, 打印log2:{}", 666, "我是log2")
Résultats des tests :
[2017-07-20 16:43:00,821] [Test] [INFO]: 打印log1:666, 打印log2:我是log2
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!