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 2.6 升级至 Python 2.7 的实践心得
Apr 27 Python
Python3.4编程实现简单抓取爬虫功能示例
Sep 14 Python
Python及Django框架生成二维码的方法分析
Jan 31 Python
浅谈python numpy中nonzero()的用法
Apr 02 Python
pandas数据清洗,排序,索引设置,数据选取方法
May 18 Python
python保存数据到本地文件的方法
Jun 23 Python
在双python下设置python3为默认的方法
Oct 31 Python
python实现停车管理系统
Nov 30 Python
python中自带的三个装饰器的实现
Nov 08 Python
Python random库使用方法及异常处理方案
Mar 02 Python
python 发送邮件的四种方法汇总
Dec 02 Python
python实现马丁策略回测3000只股票的实例代码
Jan 22 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 Ajax中文乱码问题解决方法
2009/02/27 PHP
php使用GD实现颜色渐变实例
2015/06/02 PHP
PHP的时间戳与具体时间转化的简单实现
2016/06/13 PHP
php封装的验证码工具类完整实例
2016/10/19 PHP
php 数组处理函数extract详解及实例代码
2016/11/23 PHP
PHP单例模式定义与使用实例详解
2017/02/06 PHP
Json2Template.js 基于jquery的插件 绑定JavaScript对象到Html模板中
2011/10/29 Javascript
javascript控制swfObject应用介绍
2012/11/29 Javascript
JavaScript学习笔记之ES6数组方法
2016/03/25 Javascript
基于JS实现移动端访问PC端页面时跳转到对应的移动端网页
2020/12/24 Javascript
BootStrap的JS插件之轮播效果案例详解
2016/05/16 Javascript
js微信扫描二维码登录网站技术原理
2016/12/01 Javascript
基于jQuery实现的幻灯图片切换
2016/12/02 Javascript
vue-router路由简单案例介绍
2017/02/21 Javascript
React-router v4 路由配置方法小结
2017/08/08 Javascript
react高阶组件经典应用之权限控制详解
2017/09/07 Javascript
vue 添加vux的代码讲解
2017/11/30 Javascript
js jquery 获取某一元素到浏览器顶端的距离实现方法
2018/09/05 jQuery
JavaScript适配器模式原理与用法实例详解
2020/03/09 Javascript
Map与WeakMap类型在JavaScript中的使用详解
2020/11/18 Javascript
Python中的字符串查找操作方法总结
2016/06/27 Python
使用Python处理Excel表格的简单方法
2018/06/07 Python
Python中单线程、多线程和多进程的效率对比实验实例
2019/05/14 Python
通过PYTHON来实现图像分割详解
2019/06/26 Python
django之状态保持-使用redis存储session的例子
2019/07/28 Python
python和JavaScript哪个容易上手
2020/06/23 Python
tensorflow基于CNN实战mnist手写识别(小白必看)
2020/07/20 Python
使用CSS3制作饼状旋转载入效果的实例
2015/06/23 HTML / CSS
营销与策划应届生求职信
2013/11/04 职场文书
小学班主任评语大全
2014/04/23 职场文书
列车乘务员工作不细心检讨书
2014/10/07 职场文书
幼儿园安全工作总结2015
2015/04/20 职场文书
父亲节感言
2015/08/03 职场文书
干货:如何写好观后感 !
2019/05/21 职场文书
话题作文之关于呼唤
2019/11/29 职场文书
MySQL创建管理子分区
2022/04/13 MySQL