Home  >  Article  >  Backend Development  >  Detailed explanation of Python's implementation of Logger printing function

Detailed explanation of Python's implementation of Logger printing function

巴扎黑
巴扎黑Original
2017-09-02 10:46:101939browse

Recently I encountered the need for printing at work. By searching for relevant information, I found that Logger in Python can implement printing very well, so the following article mainly introduces you to the relevant information on how Python implements the Logger printing function. In the article The introduction through sample code is very detailed, friends in need can refer to it.

Preface

As we all know, there is a suite specifically for logger printing in Python called logging, but the logger in this suite only receives a string type The logger prints information. Therefore, we need to concatenate the information to be printed into a string in advance before using it, which is not good for the cleanliness of the code.

Based on logging, I implemented a logger printing tool similar to Java's logback. The implementation is relatively simple and can handle some simple logger printing needs. I hope it can be helpful to everyone. Not much to say below, let’s take a look at the detailed introduction:

LoggerFactory

This class is used to generate loggers for other calling classes. instances and save those 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

This class mainly implements the encapsulation of some logging methods ,easier.


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

Test


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

Test result:


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

The above is the detailed content of Detailed explanation of Python's implementation of Logger printing function. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn