Python实现Logger打印功能的方法详解
作者:修凡先生 发布时间:2023-04-16 23:02:43
标签: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
来源:http://blog.csdn.net/a632189007/article/details/75548840
0
投稿
猜你喜欢
- python2:print语句,语句就意味着可以直接跟要打印的东西,如果后面接的是一个元组对象,直接打印python3:print函数,函数
- 本文主要介绍的是关于微信小程序利用co处理异步流程的方法教程,分享出来供大家参考学习,需要的朋友们下面来看看详细的介绍:coco是一个基于E
- 本文实例为大家分享了js实现页面图片消除的具体代码,供大家参考,具体内容如下前两天测试的时候发现自己对js还不是太熟悉,所以今天上传的了这篇
- 写给自己1. 首先,确定你的问题是:Jupyter-notebook可以正常运行,但是不弹出默认浏览器,例如下图(只有下图,浏览器死活没动静
- 在应用系统开发初期,由于开发数据库数据比较少,对于查询SQL语句,复杂视图的编写,刚开始不会体会出SQL语句各种写法的性能优劣,但是如果将应
- 前沿最近开始学习python了,由于要简单处理一下图片,奈何能C++力太差,openCV上手有点难,想学习一下py简单的处理一下图片就好了。
- Python GUI 库有很多,下面给大家罗列常用的几种 GUI 库。下面介绍的这些GUI框架,能满足大部分开发人员的需要,你可以根据自己的
- 如何只取数据库的前3条记录?怎么控制只取得前3行数据 这要看是什么类型的数据库了,对于Access和SQ
- 本文实例为大家分享了vuejs实现下拉框菜单选择的具体代码,供大家参考,具体内容如下方法一:<script type="te
- Access 操作很简单,具体不步骤如下:打开你mdb数据库,工具-->数据库实用工具-->压缩和修复数据库(c)... SQL SERVE
- javascript代码编写在页面中实现页内搜索功能,类似Word等文本编辑软件里的搜索功能,只要是页面中的字符(别管是显在的还是隐蔽在文本
- 每个写asp程序人必会的知识!在ASP编程中使用数组数组的定义Dim MyArrayMyArray = Array(1,5,123,12,9
- 如下所示:# 创建一个空的 DataFramedf_empty = pd.DataFrame()#或者df_empty = pd.DataF
- 最常见的方式就是为字段设置主键或唯一索引,当插入重复数据时,抛出错误,程序终止,但这会给后续处理带来麻烦,因此需要对插入语句做特殊处理,尽量
- 多表连接查询表与表之间的连接分为内连接和外连接内连接:仅选出两张表互相匹配的记录外连接:既包括两张表匹配的记录,也包括不匹配的记录,同时外连
- 本文实例讲述了php验证session无效的解决方法。分享给大家供大家参考。具体方法如下:一、问题今天在配置 apache+php环境时折腾
- 写在前面其实我之前写过一个简单的识别手写数字的程序,但是因为逻辑比较简单,而且要求比较严苛,是在50x50大小像素的白底图上手写黑色数字,并
- 前言Python 有 while 语句和 for 语句作为循环处理。虽然 for 语句具有一定数量的进程,但 while 语句是『直到满足条
- 1. 函数式编程概述1.1. 什么是函数式编程?函数式编程使用一系列的函数解决问题。函数仅接受输入并产生输出,不包含任何能影响产生输出的内部
- 最近在学习python过程中,对print()打印输出函数进行了进一步学习。python 2.6中,print输出内容需要使用引号。pyth