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计算时间差的方法
May 20 Python
Python使用poplib模块和smtplib模块收发电子邮件的教程
Jul 02 Python
将tensorflow的ckpt模型存储为npy的实例
Jul 09 Python
浅谈flask源码之请求过程
Jul 26 Python
python中时间模块的基本使用教程
May 14 Python
Python创建数字列表的示例
Nov 28 Python
Python 脚本的三种执行方式小结
Dec 21 Python
pytorch 实现张量tensor,图片,CPU,GPU,数组等的转换
Jan 13 Python
Python3+Selenium+Chrome实现自动填写WPS表单
Feb 12 Python
如何在Django中使用聚合的实现示例
Mar 23 Python
python中format函数如何使用
Jun 22 Python
Python爬取网站图片并保存的实现示例
Feb 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
利用递归把多维数组转为一维数组的函数
2006/10/09 PHP
深入密码加salt原理的分析
2013/06/06 PHP
PHP性能分析工具xhprof的安装使用与注意事项
2017/12/19 PHP
Windows Live的@live.com域名注册漏洞 利用代码
2006/12/27 Javascript
javascript iframe中打开文件,并检测iframe存在否
2008/12/28 Javascript
javaScript 读取和设置文档元素的样式属性
2009/04/14 Javascript
js将当前时间格式转换成时间搓(自写)
2013/09/26 Javascript
20个实用的JavaScript技巧分享
2014/11/28 Javascript
sencha ext js 6 快速入门(必看)
2016/06/01 Javascript
JavaScript 轮播图和自定义滚动条配合鼠标滚轮分享代码贴
2016/10/28 Javascript
bootstrap基础知识学习笔记
2016/11/02 Javascript
详解为Angular.js内置$http服务添加拦截器的方法
2016/12/20 Javascript
JavaScript复制内容到剪贴板的两种常用方法
2018/02/27 Javascript
vue组件name的作用小结
2018/05/23 Javascript
Vue-router 中hash模式和history模式的区别
2018/07/24 Javascript
详解Vue组件插槽的使用以及调用组件内的方法
2018/11/13 Javascript
JavaScript内置对象math,global功能与用法实例分析
2019/06/10 Javascript
JavaScript实现简单的图片切换功能(实例代码)
2020/04/10 Javascript
javascript canvas时钟模拟器
2020/07/13 Javascript
解决在Vue中使用axios POST请求变成OPTIONS的问题
2020/08/14 Javascript
python爬取淘宝商品详情页数据
2018/02/23 Python
Python集成开发工具Pycharm的安装和使用详解
2020/03/18 Python
Python Selenium异常处理的实例分析
2021/02/28 Python
解决CSS3的opacity属性带来的层叠顺序问题
2016/05/09 HTML / CSS
html5使用canvas实现弹幕功能示例
2017/09/11 HTML / CSS
预订全球最佳旅行体验:Viator
2018/03/30 全球购物
Zooplus葡萄牙:欧洲领先的网上宠物商店
2018/07/01 全球购物
建筑系毕业生自我鉴定
2014/01/24 职场文书
《灰椋鸟》教学反思
2014/04/27 职场文书
关于感恩的演讲稿800字
2014/08/26 职场文书
学习考察心得体会
2014/09/04 职场文书
使用PDF.js渲染canvas实现预览pdf的效果示例
2021/04/17 Javascript
Python数据清洗工具之Numpy的基本操作
2021/04/22 Python
python 详解turtle画爱心代码
2022/02/15 Python
世界十大评分最高的动漫,CLANNAD上榜,第八赚足人们眼泪
2022/03/18 日漫
MySQL数据库实验实现简单数据库应用系统设计
2022/06/21 MySQL