Heim  >  Artikel  >  Backend-Entwicklung  >  Detaillierte Erläuterung der Python-Implementierung der Logger-Druckfunktion

Detaillierte Erläuterung der Python-Implementierung der Logger-Druckfunktion

巴扎黑
巴扎黑Original
2017-09-02 10:46:101934Durchsuche

Vor kurzem bin ich auf die Notwendigkeit des Druckens bei der Arbeit gestoßen und habe festgestellt, dass Logger in Python das Drucken sehr gut implementieren kann. Daher stellt Ihnen der folgende Artikel hauptsächlich die relevanten Informationen zur Implementierung des Loggers vor Druckfunktion. Im Artikel Die Einführung durch Beispielcode ist sehr detailliert, Freunde in Not können darauf verweisen.

Vorwort

Wie wir alle wissen, gibt es in Python eine Suite namens Logging speziell für das Logger-Drucken, aber der Logger ist nur in dieser Suite enthalten empfängt einen String-Typ. Der Logger druckt Informationen. Daher müssen wir die zu druckenden Informationen vor der Verwendung in einer Zeichenfolge verketten, was sich nicht positiv auf die Sauberkeit des Codes auswirkt.

Basierend auf der Protokollierung habe ich ein Logger-Drucktool implementiert, das dem Logback von Java ähnelt. Die Implementierung ist relativ einfach und kann einige einfache Logger-Druckanforderungen erfüllen. Unten gibt es nicht viel zu sagen, werfen wir einen Blick auf die ausführliche Einführung:

LoggerFactory

Diese Klasse wird verwendet, um Logger für andere Aufrufe zu generieren Klasseninstanzen und speichern Sie diese Instanzen.


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

Diese Klasse implementiert hauptsächlich einige Methoden zum Protokollieren der Verpackung ist relativ einfach.


'''
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))

Testen


logger = LoggerFactory.getLogger("Test")
logger.info("打印log1:{}, 打印log2:{}", 666, "我是log2")

Testergebnisse:


[2017-07-20 16:43:00,821] [Test] [INFO]: 打印log1:666, 打印log2:我是log2

Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung der Python-Implementierung der Logger-Druckfunktion. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn