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中的绝对路径和相对路径
Aug 30 Python
Python通过future处理并发问题
Oct 17 Python
python3处理含有中文的url方法
May 10 Python
Django框架的使用教程路由请求响应的方法
Jul 03 Python
Python3对称加密算法AES、DES3实例详解
Dec 06 Python
python实现画五角星和螺旋线的示例
Jan 20 Python
Python之pymysql的使用小结
Jul 01 Python
numpy:np.newaxis 实现将行向量转换成列向量
Nov 30 Python
Django调用支付宝接口代码实例详解
Apr 04 Python
公认8个效率最高的爬虫框架
Jul 28 Python
Python一行代码实现自动发邮件功能
May 30 Python
FP-growth算法发现频繁项集——构建FP树
Jun 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
ThinkPHP结合ajax、Mysql实现的客户端通信功能代码示例
2014/06/23 PHP
php实现读取手机客户端浏览器的类
2015/01/09 PHP
PHP加密解密函数详解
2015/10/28 PHP
使用laravel的migrate创建数据表的方法
2019/09/30 PHP
jquery学习笔记二 实现可编辑的表格
2010/04/09 Javascript
jquery中dom操作和事件的实例学习 仿yahoo邮箱登录框的提示效果
2011/11/30 Javascript
jQuery实现级联菜单效果(仿淘宝首页菜单动画)
2014/04/10 Javascript
AngularJS入门教程(一):静态模板
2014/12/06 Javascript
javascript常用经典算法实例详解
2015/11/25 Javascript
浅析C/C++,Java,PHP,JavaScript,Json数组、对象赋值时最后一个元素后面是否可以带逗号
2016/03/22 Javascript
基于javascript数组实现图片轮播
2016/05/02 Javascript
关于JSON.parse(),JSON.stringify(),jQuery.parseJSON()的用法
2016/06/30 Javascript
简单理解vue中Props属性
2016/10/27 Javascript
js实现瀑布流效果(自动生成新的内容)
2017/03/16 Javascript
详解通过JSON数据使用VUE.JS
2017/05/26 Javascript
vue项目实战总结篇
2018/02/11 Javascript
浅析vue 函数配置项watch及函数 $watch 源码分享
2018/11/22 Javascript
vue-router的钩子函数用法实例分析
2019/10/26 Javascript
javascript设计模式 ? 中介者模式原理与用法实例分析
2020/04/20 Javascript
Python切片操作深入详解
2018/07/27 Python
使用python对文件中的数值进行累加的实例
2018/11/28 Python
python 用opencv调用训练好的模型进行识别的方法
2018/12/07 Python
python实现定时压缩指定文件夹发送邮件
2020/12/22 Python
Python实现自定义读写分离代码实例
2019/11/16 Python
Python3开发环境搭建详细教程
2020/06/18 Python
CSS3 box-shadow属性实例详解
2020/06/19 HTML / CSS
英国家喻户晓的折扣商场:TK Maxx
2017/05/26 全球购物
应届生煤化工求职信
2013/10/21 职场文书
毕业生自荐书模版
2014/01/04 职场文书
医药销售求职信范文
2014/02/01 职场文书
保密工作承诺书
2014/08/29 职场文书
乡镇镇长个人整改措施
2014/10/01 职场文书
大学班长竞选稿
2015/11/20 职场文书
2016医师资格考试考生诚信考试承诺书
2016/03/25 职场文书
PyCharm配置KBEngine快速处理代码提示冲突、配置命令问题
2021/04/03 Python
看完这篇文章获得一些java if优化技巧
2021/07/15 Java/Android