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在Windows8下获取本机ip地址的方法
Mar 14 Python
python实现斐波那契数列的方法示例
Jan 12 Python
python装饰器-限制函数调用次数的方法(10s调用一次)
Apr 21 Python
Python面向对象类继承和组合实例分析
May 28 Python
对Python中小整数对象池和大整数对象池的使用详解
Jul 09 Python
python生成器/yield协程/gevent写简单的图片下载器功能示例
Oct 28 Python
TensorFlow加载模型时出错的解决方式
Feb 06 Python
python 爬取疫情数据的源码
Feb 09 Python
Python小白学习爬虫常用请求报头
Jun 03 Python
Python通过yagmail实现发送邮件代码解析
Oct 27 Python
浅析python连接数据库的重要事项
Feb 22 Python
详解python字符串驻留技术
May 21 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
smarty的保留变量问题
2008/10/23 PHP
解析获取优酷视频真实下载地址的PHP源代码
2013/06/26 PHP
PHP使用imagick扩展实现合并图像的方法
2017/04/25 PHP
PHP中引用类型和值类型功能与用法示例
2019/02/26 PHP
『JavaScript』限制Input只能输入数字实现思路及代码
2013/04/22 Javascript
JavaScript用Number方法实现string转int
2014/05/13 Javascript
使用 js+正则表达式为关键词添加链接
2014/11/11 Javascript
jQuery实现鼠标经过提示信息的地图热点效果
2015/04/26 Javascript
JS中常用的输出方式(五种)
2016/06/12 Javascript
微信小程序 video详解及简单实例
2017/01/16 Javascript
使用JavaScript判断用户输入的是否为正整数(两种方法)
2017/02/05 Javascript
vue实现某元素吸顶或固定位置显示(监听滚动事件)
2017/12/13 Javascript
vue-cli 打包使用history模式的后端配置实例
2018/09/20 Javascript
详解Vue实战指南之依赖注入(provide/inject)
2018/11/13 Javascript
深入解析Vue源码实例挂载与编译流程实现思路详解
2019/05/05 Javascript
通过实例解析JavaScript for in及for of区别
2020/06/15 Javascript
浅谈vue中get请求解决传输数据是数组格式的问题
2020/08/03 Javascript
解决vuecli3中img src 的引入问题
2020/08/04 Javascript
python单例模式实例分析
2015/04/08 Python
wxpython中Textctrl回车事件无效的解决方法
2016/07/21 Python
Python结巴中文分词工具使用过程中遇到的问题及解决方法
2017/04/15 Python
将字典转换为DataFrame并进行频次统计的方法
2018/04/08 Python
python的scikit-learn将特征转成one-hot特征的方法
2018/07/10 Python
Python环境Pillow( PIL )图像处理工具使用解析
2019/09/12 Python
Python3.7安装keras和TensorFlow的教程图解
2020/06/18 Python
python with语句的原理与用法详解
2020/03/30 Python
Python读入mnist二进制图像文件并显示实例
2020/04/24 Python
Python压缩模块zipfile实现原理及用法解析
2020/08/14 Python
Beauty Expert美国/加拿大:购买奢侈美容产品
2018/12/05 全球购物
不开辟用于交换数据的临时空间,如何完成字符串的逆序
2012/12/02 面试题
const和static readonly区别
2013/05/20 面试题
毕业生个人求职自荐信
2014/02/26 职场文书
应聘编辑自荐信范文
2014/03/12 职场文书
校运会口号
2014/06/18 职场文书
应届生面试求职信
2014/07/02 职场文书
理想国读书笔记
2015/06/25 职场文书