Python实现Logger打印功能的方法详解
前言
众所周知在Python中有专门用于logger打印的套件叫logging,但是该套件logger仅接收一个字符串类型的logger打印信息。因此,我们在使用是需要先提前将要打印的信息拼接成一个字符串之后才行,这样对于代码的整洁性并不好。
我在logging的基础上实现了一个类似于Java的logback的logger打印工具,实现比较简单,能够应对一些简单的logger打印需求,希望对大家能有帮助。下面话不多说了,来一起看看详细的介绍:
LoggerFactory
该类用作生成其他调用类的logger实例,并保存这些实例。
'''
Createdon2017年7月20日
Logger工厂,保存每个类的Logger实例
'''
fromslient.bigdata.common.loggerimportLogger
importlogging
classLoggerFactory:
LOG_FILENAME='bigdata_python.log'#logger保存文件
TYPE="CONSOLE"#logger打印类型
#TYPE="FILE"
LEVEL=logging.DEBUG#logger级别
#LEVEL=logging.INFO
loggerDict={}
#对外部开放的Logger调用方法
@staticmethod
defgetLogger(className)->Logger:
ifclassNameinLoggerFactory.loggerDict.keys():
logger=LoggerFactory.loggerDict[className]
ifnotlogger:
logger=LoggerFactory.__initLogger(className)
else:
logger=LoggerFactory.__initLogger(className)
returnlogger
#生成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')
ifLoggerFactory.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
returnlocalLogger
Logger
该类主要实现了对logging的一些方法的封装,比较简单。
''' Createdon2017年7月5日 日志处理 ''' importlogging importstring classLogger: def__init__(self,logger:logging): self.logger=logger definfo(self,formatStr:string,*objs): self.logger.info(formatStr.format(*objs)) defdebug(self,formatStr:string,*objs): self.logger.debug(formatStr.format(*objs)) deferror(self,formatStr:string,*objs): self.logger.error(formatStr.format(*objs))
测试
logger=LoggerFactory.getLogger("Test")
logger.info("打印log1:{},打印log2:{}",666,"我是log2")
测试结果:
[2017-07-2016:43:00,821][Test][INFO]:打印log1:666,打印log2:我是log2
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对毛票票的支持。