Python实现Logger打印功能的方法详解


Posted in Python onSeptember 01, 2017

前言

众所周知在Python中有专门用于logger打印的套件叫logging,但是该套件logger仅接收一个字符串类型的logger打印信息。因此,我们在使用是需要先提前将要打印的信息拼接成一个字符串之后才行,这样对于代码的整洁性并不好。

我在logging的基础上实现了一个类似于Java的logback的logger打印工具,实现比较简单,能够应对一些简单的logger打印需求,希望对大家能有帮助。下面话不多说了,来一起看看详细的介绍:

LoggerFactory

该类用作生成其他调用类的logger实例,并保存这些实例。

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

该类主要实现了对logging的一些方法的封装,比较简单。

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

测试

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

测试结果:

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

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Python 相关文章推荐
Python中列表、字典、元组、集合数据结构整理
Nov 20 Python
python检测某个变量是否有定义的方法
May 20 Python
Python变量作用范围实例分析
Jul 07 Python
Python中集合的内建函数和内建方法学习教程
Aug 19 Python
安装Python的教程-Windows
Jul 22 Python
python装饰器实例大详解
Oct 25 Python
详解Python map函数及Python map()函数的用法
Nov 16 Python
selenium+python实现自动化登录的方法
Sep 04 Python
树莓派极简安装OpenCv的方法步骤
Oct 10 Python
使用tensorflow DataSet实现高效加载变长文本输入
Jan 20 Python
Python使用eval函数执行动态标表达式过程详解
Oct 17 Python
python代码实现备忘录案例讲解
Jul 26 Python
Python数据分析之如何利用pandas查询数据示例代码
Sep 01 #Python
Python使用回溯法子集树模板解决迷宫问题示例
Sep 01 #Python
Python基于回溯法子集树模板实现8皇后问题
Sep 01 #Python
Python3.x对JSON的一些操作示例
Sep 01 #Python
Python+Socket实现基于TCP协议的客户与服务端中文自动回复聊天功能示例
Aug 31 #Python
Python+Socket实现基于UDP协议的局域网广播功能示例
Aug 31 #Python
python requests 使用快速入门
Aug 31 #Python
You might like
基于jquery的实现简单的表格中增加或删除下一行
2010/08/01 Javascript
jQuery-serialize()输出序列化form表单值的方法
2012/12/26 Javascript
JQuery的Ajax跨域请求原理概述及实例
2013/04/26 Javascript
原生js实现fadein 和 fadeout淡入淡出效果
2014/06/05 Javascript
JavaScript将XML转成JSON的方法
2015/03/12 Javascript
JS简单限制textarea内输入字符数量的方法
2015/10/14 Javascript
angular2使用简单介绍
2016/03/01 Javascript
js鼠标跟随运动效果
2017/03/11 Javascript
ES6新特性五:Set与Map的数据结构实例分析
2017/04/21 Javascript
input 标签实现输入框带提示文字效果(两种方法)
2017/10/09 Javascript
详解将微信小程序接口Promise化并使用async函数
2019/08/05 Javascript
jquery实现的分页显示功能示例
2019/08/23 jQuery
JavaScript进阶(一)变量声明提升实例分析
2020/05/09 Javascript
[48:32]2018DOTA2亚洲邀请赛 3.31 小组赛 A组 LGD vs VG
2018/04/01 DOTA
python中lambda与def用法对比实例分析
2015/04/30 Python
python的numpy模块安装不成功简单解决方法总结
2017/12/23 Python
Python实现的本地文件搜索功能示例【测试可用】
2018/05/30 Python
Python实现FTP文件传输的实例
2019/07/07 Python
解决Python安装时报缺少DLL问题【两种解决方法】
2019/07/15 Python
python之列表推导式的用法
2019/11/29 Python
python数据分析:关键字提取方式
2020/02/24 Python
Python接口测试文件上传实例解析
2020/05/22 Python
推荐值得学习的12款python-web开发框架
2020/08/10 Python
PyCharm+Miniconda3安装配置教程详解
2021/02/16 Python
Hotels.com加拿大:领先的在线住宿网站
2018/10/05 全球购物
EJB发布WEB服务一般步骤
2012/10/31 面试题
深圳茁壮笔试题
2015/05/28 面试题
文员个人的求职信范文
2013/09/26 职场文书
我的五年职业生涯规划
2014/01/23 职场文书
合作意向书模板
2014/03/31 职场文书
励志演讲稿800字
2014/08/21 职场文书
我们的节日重阳节活动总结
2015/03/24 职场文书
2019年朋友圈经典励志语录50条
2019/07/05 职场文书
一篇带你入门Java垃圾回收器
2021/06/16 Java/Android
Oracle使用别名的好处
2022/04/19 Oracle
Shell中的单中括号和双中括号的用法详解
2022/12/24 Servers