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 相关文章推荐
pyramid配置session的方法教程
Nov 27 Python
用Python制作在地图上模拟瘟疫扩散的Gif图
Mar 31 Python
浅谈python中scipy.misc.logsumexp函数的运用场景
Jun 23 Python
浅析python的优势和不足之处
Nov 20 Python
pygame游戏之旅 添加游戏界面按键图形
Nov 20 Python
在python3中pyqt5和mayavi不兼容问题的解决方法
Jan 08 Python
Python实现监控Nginx配置文件的不同并发送邮件报警功能示例
Feb 26 Python
Python中Numpy mat的使用详解
May 24 Python
使用python的turtle函数绘制一个滑稽表情
Feb 28 Python
keras在构建LSTM模型时对变长序列的处理操作
Jun 29 Python
Django如何实现密码错误报错提醒
Sep 04 Python
python读取excel数据绘制简单曲线图的完整步骤记录
Oct 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
PHP 飞信好友免费短信API接口开源版
2010/07/22 PHP
php使用glob函数遍历文件和目录详解
2016/09/23 PHP
CCPry JS类库 代码
2009/10/30 Javascript
jQuery 常见开发使用技巧总结
2009/12/26 Javascript
JavaScript 输入框内容格式验证代码
2010/02/11 Javascript
基于jquery的多彩百分比 动态进度条 投票效果显示效果实现代码
2011/08/28 Javascript
window.open 以post方式传递参数示例代码
2014/02/27 Javascript
ExtJS4如何给同一个formpanel不同的url
2014/05/02 Javascript
浅谈下拉菜单中的Option对象
2015/05/10 Javascript
jquery ajax分页插件的简单实现
2016/01/27 Javascript
Document.body.scrollTop的值总为零的快速解决办法
2016/06/09 Javascript
angular.js之路由的选择方法
2016/09/24 Javascript
基于Vuejs框架实现翻页组件
2020/06/29 Javascript
基于ExtJs在页面上window再调用Window的事件处理方法
2017/07/26 Javascript
javascript实现数字配对游戏的实例讲解
2017/12/14 Javascript
vue中el-upload上传图片到七牛的示例代码
2018/10/19 Javascript
微信小程序绘制图片发送朋友圈
2019/07/25 Javascript
SpringBoot+Vue开发之Login校验规则、实现登录和重置事件
2020/10/19 Javascript
[05:08]第一届“网鱼杯”DOTA2比赛精彩集锦
2014/09/05 DOTA
Python操作Word批量生成文章的方法
2015/07/28 Python
基于python select.select模块通信的实例讲解
2017/09/21 Python
python如何修改装饰器中参数
2018/03/20 Python
Python FTP两个文件夹间的同步实例代码
2018/05/25 Python
使用python实现语音文件的特征提取方法
2019/01/09 Python
解决win7操作系统Python3.7.1安装后启动提示缺少.dll文件问题
2019/07/15 Python
python安装gdal的两种方法
2019/10/29 Python
英国在线药房和在线医生:LloydsPharmacy
2019/10/21 全球购物
教师自我反思材料
2014/02/14 职场文书
贷款委托书怎么写
2014/08/02 职场文书
离职证明范本(5篇)
2014/09/19 职场文书
大学生考试作弊检讨书
2014/09/21 职场文书
2015年农村党员干部主题教育活动总结
2015/03/25 职场文书
乒乓球比赛通知
2015/04/27 职场文书
2016教师廉洁教育心得体会
2016/01/13 职场文书
html5移动端禁止长按图片保存的实现
2021/04/20 HTML / CSS
Django与数据库交互的实现
2021/06/03 Python