Python实现Logger打印功能的方法详解

前言

众所周知在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

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对我们的支持。

(0)

相关推荐

  • Python中使用logging模块打印log日志详解

    学一门新技术或者新语言,我们都要首先学会如何去适应这们新技术,其中在适应过程中,我们必须得学习如何调试程序并打出相应的log信息来,正所谓"只要log打的好,没有bug解不了",在我们熟知的一些信息技术中,log4xxx系列以及开发Android app时的android.util.Log包等等都是为了开发者更好的得到log信息服务的.在Python这门语言中,我们同样可以根据自己的程序需要打出log. log信息不同于使用打桩法打印一定的标记信息,log可以根据程序需要而分出不同的l

  • Python实现Logger打印功能的方法详解

    前言 众所周知在Python中有专门用于logger打印的套件叫logging,但是该套件logger仅接收一个字符串类型的logger打印信息.因此,我们在使用是需要先提前将要打印的信息拼接成一个字符串之后才行,这样对于代码的整洁性并不好. 我在logging的基础上实现了一个类似于Java的logback的logger打印工具,实现比较简单,能够应对一些简单的logger打印需求,希望对大家能有帮助.下面话不多说了,来一起看看详细的介绍: LoggerFactory 该类用作生成其他调用类的

  • Python实现邮件发送功能的方法详解

    目录 利用 python 发送普通邮件 认识发送邮件流程 认识邮件协议 smtplib 模块 email 包 发送邮件小案例 发送邮件的避坑总结 邮件自动化篇章所需的新模块: smtplib 邮件协议与发送模块 email 内容定义模块 schedule 定时模块 smtplib 与 email 模块 可以帮助我们正常的发送邮件: schedule 模块可以帮助我们定时发送邮件,比如工资邮件等需要固定时间发送的邮件 利用 python 发送普通邮件 认识发送邮件流程 这里简单描述下发邮件的过程(

  • Python使用Asyncio进行web编程方法详解

    目录 前言 什么是同步编程 什么是异步编程 ayncio 版 Hello 程序 如何使用 asyncio 总结 前言 许多 Web 应用依赖大量的 I/O (输入/输出) 操作,比如从网站上下载图片.视频等内容:进行网络聊天或者针对后台数据库进行多次查询.数据库查询可能会耗费大量时间,尤其是在该数据库处于高负载或查询很复杂的情况下. Web 服务器可能需要同时处理数百或数千个请求. I/O 是指计算机的输入和输出设备,例如键盘.硬盘驱动器,以及最常见的网卡.这些操作等待用户输入或从基于 Web

  • 对Python获取屏幕截图的4种方法详解

    Python获取电脑截图有多种方式,具体如下: PIL中的ImageGrab模块 windows API PyQt pyautogui PIL中的ImageGrab模块 import time import numpy as np from PIL import ImageGrab img = ImageGrab.grab(bbox=(100, 161, 1141, 610)) img = np.array(img.getdata(), np.uint8).reshape(img.size[1]

  • python中Django文件上传方法详解

    Django上传文件最简单最官方的方法 1.配置media路径 在settings.py中添加如下代码: MEDIA_ROOT = os.path.join(BASE_DIR, 'media') 2.定义数据表 import os from django.db import models from django.utils.timezone import now as timezone_now def upload_to(instance, filename):     now = timezo

  • Python列表元素删除和remove()方法详解

    删除列表中元素的方法有三种: 1. del命令 使用del命令能够删除列表中指定位置上的元素,也可以删除整个列表. 2. pop( )方法 使用列表的pop()方法能够删除并返回列表指定位置(默认为最后一个位置)的元素. 3. remove方法 使用列表的remove()方法能够删除列表中首次出现的指定元素,如果列表中不存在该元素则抛出异常.有的时候可能需要删除列表中某一大量重复的数据,我们很容易就会想到列表的remove()方法,例如: x=[1,2,1,2,1,2,1,2] y=[1,1,2

  • MyBatisPlus+Lombok实现分页功能的方法详解

    目录 一.Lombok 1.添加Lombok依赖 2.安装Lombok插件 3.模型类上添加注解 二.分页功能 1.调用方法传入参数获取返回值 2.设置分页拦截器 3.运行测试程序 一.Lombok 从上一篇博客可看出,DAO接口类的编写变得简单,反过来看模型,编写还需要(私有属性.setter...getter...方法.toString方法.构造函数等内容),对于模型类有什么优化方法,可以用Lombok. 概念:Lombok,一个Java类库,提供了一组注解,简化POJO实体类开发. 使用步

  • Python制作数据分析透视表的方法详解

    目录 1.pivot_table函数index属性 2.pivot_table函数values属性 3.pivot_table函数aggfunc属性 4.pivot_table函数columns属性 透视表是一种可以对数据动态排布并且分类汇总的表格格式,在常用的python的数据分析非标准库pandas中体现为pivot_table模块. pivot_table数据透视表可以灵活的定制数据分析需求进行汇总,当然在Excel办公操作中早就存在了数据透视表的工具.如今,数据透视表被应用在python

  • python爬虫之BeautifulSoup 使用select方法详解

    本文介绍了python爬虫之BeautifulSoup 使用select方法详解 ,分享给大家.具体如下: <html><head><title>The Dormouse's story</title></head> <body> <p class="title" name="dromouse"><b>The Dormouse's story</b></

  • Android中用Bmob实现短信验证码功能的方法详解

    这篇文章主要介绍发送验证码和校验验证码的功能,用到一个第三方平台Bmob,那Bmob是什么呢?Bmob可以开发一个云存储的移动应用软件,他提供了大量的标准的API接口,根据需要接入相关服务,开发者可以更加专注于应用的开发,让产品交付更快速,验证码功能就是其中一个. 一.跟其他第三方一样,我们开发之前要做一些准备工作. 1.首先,去官网注册一个帐号:http://www.bmob.cn/: 2.然后就可以创建应用了:具体怎么做Bmob说得很清楚了(官方操作介绍),如果你不想看,我简单说一下:点击右

随机推荐