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实现的简单文件传输服务器和客户端
Apr 08 Python
Django原生sql也能使用Paginator分页的示例代码
Nov 15 Python
用不到50行的Python代码构建最小的区块链
Nov 16 Python
pygame游戏之旅 载入小车图片、更新窗口
Nov 20 Python
PyQt QListWidget修改列表项item的行高方法
Jun 20 Python
Pyqt5 基本界面组件之inputDialog的使用
Jun 25 Python
python获取txt文件词向量过程详解
Jul 05 Python
python多进程重复加载的解决方式
Dec 13 Python
python实现在线翻译
Jun 18 Python
Python matplotlib模块及柱状图用法解析
Aug 10 Python
python使用yaml 管理selenium元素的示例
Dec 01 Python
Python数据分析之pandas读取数据
Jun 02 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
PHP 修复未正常关闭的HTML标签实现代码(支持嵌套和就近闭合)
2012/06/07 PHP
解析func_num_args与func_get_args函数的使用
2013/06/24 PHP
PHP获取客户端真实IP地址的5种情况分析和实现代码
2014/07/08 PHP
php创建无限级树型菜单
2015/11/05 PHP
jquery插件之easing 动态菜单
2010/08/21 Javascript
JavaScript初学者应注意的七个细节小结
2012/01/30 Javascript
javascript 基础篇3 类,回调函数,内置对象,事件处理
2012/03/14 Javascript
获取div编辑框,textarea,input text的光标位置 兼容IE,FF和Chrome的方法介绍
2012/11/08 Javascript
onmouseover和onmouseout的一些问题思考
2013/08/14 Javascript
jquery实现图片裁剪思路及实现
2013/08/16 Javascript
javascript数组操作方法小结和3个属性详细介绍
2014/07/05 Javascript
js图片实时加载提供网页打开速度
2014/09/11 Javascript
jQuery UI库中dialog对话框功能使用全解析
2016/04/23 Javascript
使用Vue实现图片上传的三种方式
2018/07/17 Javascript
vue中jsonp插件的使用方法示例
2020/09/10 Javascript
在vue中使用vant TreeSelect分类选择组件操作
2020/11/02 Javascript
[02:51]DOTA2 Supermajor小组分组对阵抽签仪式
2018/06/01 DOTA
Python利用IPython提高开发效率
2016/08/10 Python
python 中split 和 strip的实例详解
2017/07/12 Python
Window10+Python3.5安装opencv的教程推荐
2018/04/02 Python
python实现Virginia无密钥解密
2019/03/20 Python
python实现从本地摄像头和网络摄像头截取图片功能
2019/07/11 Python
python基于三阶贝塞尔曲线的数据平滑算法
2019/12/27 Python
解决python gdal投影坐标系转换的问题
2020/01/17 Python
python 已知平行四边形三个点,求第四个点的案例
2020/04/12 Python
利用Canvas模仿百度贴吧客户端loading小球的方法示例
2017/08/13 HTML / CSS
贝佳斯官方网站:Borghese
2020/05/08 全球购物
Bandier官网:奢侈、时尚前卫的健身服装首选目的地
2020/07/05 全球购物
小学信息技术教学反思
2014/02/10 职场文书
团日活动总结书格式
2014/05/08 职场文书
在职党员进社区活动总结
2014/07/05 职场文书
简易离婚协议书范本2014
2014/10/15 职场文书
2014年党员发展工作总结
2014/12/02 职场文书
秦始皇兵马俑导游词
2015/02/02 职场文书
鲁冰花观后感
2015/06/10 职场文书
MySQL中in和exists区别详解
2021/06/03 MySQL