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将xml和xsl转换为html的方法
Mar 10 Python
Python基础入门之seed()方法的使用
May 15 Python
在Python程序中操作文件之flush()方法的使用教程
May 24 Python
python定时器(Timer)用法简单实例
Jun 04 Python
详解如何用OpenCV + Python 实现人脸识别
Oct 20 Python
python自动裁剪图像代码分享
Nov 25 Python
Python简单实现阿拉伯数字和罗马数字的互相转换功能示例
Apr 17 Python
Python2和Python3.6环境解决共存问题
Nov 09 Python
python实现中文文本分句的例子
Jul 15 Python
python tkinter组件摆放方式详解
Sep 16 Python
Python 实现毫秒级淘宝抢购脚本的示例代码
Sep 16 Python
Scrapy中如何向Spider传入参数的方法实现
Sep 28 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 检查电子邮件函数(自写)
2014/01/16 PHP
Laravel5权限管理方法详解
2016/07/26 PHP
Docker配置PHP开发环境教程
2016/12/21 PHP
Jquery Ajax 学习实例2 向页面发出请求 返回JSon格式数据
2010/03/15 Javascript
AngularJS学习笔记之基本指令(init、repeat)
2015/06/16 Javascript
JavaScript中的冒泡排序法
2016/08/03 Javascript
jQuery实现手机版页面翻页效果的简单实例
2016/10/05 Javascript
jQuery模拟实现的select点击选择效果【附demo源码下载】
2016/11/09 Javascript
JavaScript实现垂直滚动条效果
2017/01/18 Javascript
详解JavaScript 中getElementsByName在IE中的注意事项
2017/02/21 Javascript
原生JS中slice()方法和splice()区别
2017/03/06 Javascript
详解使用Node.js 将txt文件转为Excel文件
2017/07/05 Javascript
浅谈Vuex的状态管理(全家桶)
2017/11/04 Javascript
基于openlayers4实现点的扩散效果
2020/08/17 Javascript
Vue 2.5.2下axios + express 本地请求404的解决方法
2018/02/21 Javascript
微信小程序 如何获取网络状态
2019/07/26 Javascript
vue实现商品列表的添加删除实例讲解
2020/05/14 Javascript
python实现简单登陆系统
2018/10/18 Python
python 实现创建文件夹和创建日志文件的方法
2019/07/07 Python
python3.x提取中文的正则表达式示例代码
2019/07/23 Python
Python urlopen()和urlretrieve()用法解析
2020/01/07 Python
pyautogui自动化控制鼠标和键盘操作的步骤
2020/04/01 Python
python+adb命令实现自动刷视频脚本案例
2020/04/23 Python
打印tensorflow恢复模型中所有变量与操作节点方式
2020/05/26 Python
用pushplus+python监控亚马逊到货动态推送微信
2021/01/29 Python
利用css3画个同心圆示例代码
2017/07/03 HTML / CSS
Maje德国官网:法国女性成衣品牌
2017/02/10 全球购物
澳大利亚在线高跟鞋商店:Shoe Me
2019/11/19 全球购物
英国在线玫瑰专家:InterRose
2019/12/01 全球购物
JAVA语言如何进行异常处理,关键字:throws,throw,try,catch,finally分别代表什么意义?在try块中可以抛出异常吗?
2013/07/02 面试题
上课看小说检讨书
2014/02/22 职场文书
优秀教育工作者事迹材料
2014/12/24 职场文书
意向协议书
2015/01/27 职场文书
信用卡工资证明范本
2015/06/19 职场文书
幼儿教师继续教育培训心得体会
2016/01/19 职场文书
餐厅如何利用“营销策略”扭转亏本局面
2019/10/15 职场文书