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之集成开发环境(IDE)
Sep 12 Python
Python实现基本数据结构中栈的操作示例
Dec 04 Python
今天 平安夜 Python 送你一顶圣诞帽 @微信官方
Dec 25 Python
python实现聊天小程序
Mar 13 Python
python 读写文件,按行修改文件的方法
Jul 12 Python
Flask Web开发入门之文件上传(八)
Aug 17 Python
浅析Windows 嵌入python解释器的过程
Jul 26 Python
Python企业编码生成系统之主程序模块设计详解
Jul 26 Python
Python中模块(Module)和包(Package)的区别详解
Aug 07 Python
安装PyInstaller失败问题解决
Dec 14 Python
Python编译为二进制so可执行文件实例
Dec 23 Python
PyTorch加载预训练模型实例(pretrained)
Jan 17 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 数组的一个悲剧?
2011/05/11 PHP
phpQuery让php处理html代码像jQuery一样方便
2015/01/06 PHP
WordPress开发中短代码的实现及相关函数使用技巧
2016/01/05 PHP
详解WordPress中的头像缓存和代理中的缓存更新方法
2016/03/01 PHP
PHP大文件及断点续传下载实现代码
2020/08/18 PHP
监控 url fragment变化的js代码
2010/04/19 Javascript
javascript中match函数的用法小结
2014/02/08 Javascript
javascript生成随机大小写字母的方法
2014/02/20 Javascript
一个不错的仿携程自定义数据下拉选择select
2014/09/01 Javascript
JS实现模拟风力的雪花飘落效果
2015/05/13 Javascript
JavaScript中的toLocaleDateString()方法使用简介
2015/06/12 Javascript
js文本框走动跑马灯效果代码分享
2015/08/25 Javascript
日常收藏的jquery技巧
2015/12/02 Javascript
JavaScript学习笔记之ES6数组方法
2016/03/25 Javascript
angularJS Provider、factory、service详解及实例代码
2016/09/21 Javascript
JavaScript将base64图片转换成formData并通过AJAX提交的实现方法
2016/10/24 Javascript
EditPlus中的正则表达式 实战(2)
2016/12/15 Javascript
vue实现局部刷新的实现示例
2019/04/16 Javascript
使用python实现正则匹配检索远端FTP目录下的文件
2015/03/25 Python
python中kmeans聚类实现代码
2018/02/23 Python
使用Matplotlib绘制不同颜色的带箭头的线实例
2020/04/17 Python
常用的四种CSS透明属性介绍
2014/04/12 HTML / CSS
英国领先的品牌珠宝和配件供应商:Acotis Jewellery
2018/03/07 全球购物
Volcom英国官方商店:美国殿堂级滑板、冲浪、滑雪服装品牌
2019/03/13 全球购物
优秀实习自我鉴定
2013/12/04 职场文书
咖啡馆创业计划书
2014/01/26 职场文书
《伯牙绝弦》教学反思
2014/03/02 职场文书
校庆筹备方案
2014/03/30 职场文书
领导班子民主生活会整改措施(工商局)
2014/09/21 职场文书
小学教师求职信范文
2015/03/20 职场文书
工作收入证明范本
2015/06/12 职场文书
来探秘“德国中小企业”的成功之道
2019/07/26 职场文书
《卧薪尝胆》读后感3篇
2019/12/26 职场文书
ThinkPHP5和ThinkPHP6的区别
2021/03/31 PHP
MySQL中你可能忽略的COLLATION实例详解
2021/05/12 MySQL
如何在Python项目中引入日志
2021/05/31 Python