Detailed explanation of Python's implementation of Logger printing function

巴扎黑
Release: 2017-09-02 10:46:10
Original
1901 people have browsed it

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
Copy after login

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))
Copy after login

Test


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

Test result:


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

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!

Related labels:
source:php.cn
Statement of this Website
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
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!