Maison  >  Article  >  développement back-end  >  Explication détaillée de l'implémentation par Python de la fonction d'impression Logger

Explication détaillée de l'implémentation par Python de la fonction d'impression Logger

巴扎黑
巴扎黑original
2017-09-02 10:46:101953parcourir

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!

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