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中使用md5sum检查目录中相同文件代码分享
Feb 02 Python
Python Web框架Flask中使用百度云存储BCS实例
Feb 08 Python
Python中字符串对齐方法介绍
May 21 Python
Python使用Matplotlib实现雨点图动画效果的方法
Dec 23 Python
python获取服务器响应cookie的实例
Dec 28 Python
在PyCharm中控制台输出日志分层级分颜色显示的方法
Jul 11 Python
pytorch之inception_v3的实现案例
Jan 06 Python
用Python开发app后端有优势吗
Jun 29 Python
python如何进入交互模式
Jul 06 Python
Python通过getattr函数获取对象的属性值
Oct 16 Python
python 带时区的日期格式化操作
Oct 23 Python
一文搞懂如何实现Go 超时控制
Mar 30 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
《被神捡到的男人》动画化计划进行中!
2020/03/06 日漫
php设置允许大文件上传示例代码
2014/03/10 PHP
PHP发送AT指令实例代码
2016/05/26 PHP
php实现留言板功能(会话控制)
2017/05/23 PHP
php反射学习之不用new方法实例化类操作示例
2019/06/14 PHP
js小技巧--自动隐藏红叉叉
2007/08/13 Javascript
一个轻量级的javascript库 pj介绍
2010/12/19 Javascript
JavaScript中判断对象类型的几种方法总结
2013/11/11 Javascript
jQuery对指定元素中指定字符串进行替换的方法
2015/03/17 Javascript
JQuery中ajax方法访问web服务实例
2015/07/18 Javascript
jQuery模拟原生态App上拉刷新下拉加载更多页面及原理
2015/08/10 Javascript
jQuery添加删除DOM元素方法详解
2016/01/18 Javascript
jquery Deferred 快速解决异步回调的问题
2016/04/05 Javascript
iScroll.js 使用方法参考
2016/05/16 Javascript
一步一步封装自己的HtmlHelper组件BootstrapHelper(三)
2016/09/14 Javascript
简单实现js轮播图效果
2017/07/14 Javascript
jQuery实现鼠标响应式淘宝动画效果示例
2018/02/13 jQuery
js实现简单模态框实例
2018/11/16 Javascript
JSX在render函数中的应用详解
2019/09/04 Javascript
CKEditor扩展插件:自动排版功能autoformat插件实现方法详解
2020/02/06 Javascript
详解三种方式在React中解决绑定this的作用域问题并传参
2020/08/18 Javascript
理解Python中的类与实例
2015/04/27 Python
Windows下的Python 3.6.1的下载与安装图文详解(适合32位和64位)
2018/02/21 Python
对Pycharm创建py文件时自定义头部模板的方法详解
2019/02/12 Python
在django view中给form传入参数的例子
2019/07/19 Python
python正则表达式匹配IP代码实例
2019/12/28 Python
使用Python 自动生成 Word 文档的教程
2020/02/13 Python
高中三年学习生活的自我评价
2013/10/10 职场文书
医院护士专业个人的求职信
2013/12/09 职场文书
装配车间主任岗位职责
2015/04/08 职场文书
向雷锋同志学习倡议书
2015/04/27 职场文书
一小时迅速入门Mybatis之bind与多数据源支持 Java API
2021/09/15 Javascript
django 认证类配置实现
2021/11/11 Python
攻击最高的10只幽灵系神奇宝贝,坚盾剑怪排第一,第五最为可怕
2022/03/18 日漫
vmware虚拟机打不开vmx文件怎么办 ?vmware虚拟机vmx文件打开方法
2022/04/08 数码科技
Java Spring读取和存储详细操作
2022/08/05 Java/Android