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异步编程之asyncio(百万并发)
Jul 07 Python
Python爬虫之正则表达式基本用法实例分析
Aug 08 Python
Pycharm无法显示动态图片的解决方法
Oct 28 Python
Python中dict和set的用法讲解
Mar 28 Python
简单介绍django提供的加密算法
Dec 18 Python
python GUI库图形界面开发之PyQt5下拉列表框控件QComboBox详细使用方法与实例
Feb 27 Python
django从后台返回html代码的实例
Mar 11 Python
python argparse传入布尔参数false不生效的解决
Apr 20 Python
解决redis与Python交互取出来的是bytes类型的问题
Jul 16 Python
python获取时间戳的实现示例(10位和13位)
Sep 23 Python
python 读取yaml文件的两种方法(在unittest中使用)
Dec 01 Python
解决IDEA翻译插件Translation报错更新TTK失败不能使用
Apr 24 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
推荐Discuz!5的PHP代码高亮显示与实现可运行代码
2007/03/15 PHP
destoon首页调用求购供应信息的地区名称的方法
2014/08/21 PHP
Laravel构建即时应用的一种实现方法详解
2017/08/31 PHP
thinkphp5.0自定义验证规则使用方法
2017/11/16 PHP
PHP命名空间用法实例分析
2019/09/04 PHP
js 获取计算后的样式写法及注意事项
2013/02/25 Javascript
js获取触发事件元素在整个网页中的绝对坐标(示例代码)
2013/12/13 Javascript
jQuery中ajax的post()方法用法实例
2014/12/26 Javascript
基于JavaScript Array数组方法(新手必看篇)
2016/08/20 Javascript
Vuejs仿网易云音乐实现听歌及搜索功能
2017/03/30 Javascript
自适应布局meta标签中viewport、content、width、initial-scale、minimum-scale、maximum-scale总结
2017/08/18 Javascript
vue实现的微信机器人聊天功能案例【附源码下载】
2019/02/18 Javascript
小程序实现自定义导航栏适配完美版
2019/04/02 Javascript
vue实现div单选多选功能
2020/07/16 Javascript
[08:56]DOTA2-DPC中国联赛2月23日Recap集锦
2021/03/11 DOTA
提升Python程序运行效率的6个方法
2015/03/31 Python
python中引用与复制用法实例分析
2015/06/04 Python
简单了解Python中的几种函数
2017/11/03 Python
使用python实现http及ftp服务进行数据传输的方法
2018/10/26 Python
详解Python3定时器任务代码
2019/09/23 Python
python实现通过队列完成进程间的多任务功能示例
2019/10/28 Python
python Popen 获取输出,等待运行完成示例
2019/12/30 Python
python 链接sqlserver 写接口实例
2020/03/11 Python
pytorch使用horovod多gpu训练的实现
2020/09/09 Python
html5中使用hotcss.js实现手机端自适配的方法
2020/04/23 HTML / CSS
ToysRus日本官网:玩具反斗城
2018/09/08 全球购物
英国旅行箱包和行李箱购物网站:Travel Luggage & Cabin Bags
2019/08/26 全球购物
渡河少年教学反思
2014/02/12 职场文书
《理想》教学反思
2014/02/17 职场文书
《鞋匠的儿子》教学反思
2014/03/02 职场文书
公司党的群众路线教育实践活动领导班子对照检查材料
2014/09/25 职场文书
2014年党员评议表自我评价
2014/09/27 职场文书
2014年党建工作总结
2014/11/11 职场文书
2014年扶贫帮困工作总结
2014/12/09 职场文书
2015年党员公开承诺书范文
2015/01/22 职场文书
Python+OpenCV实现在图像上绘制矩形
2022/03/21 Python