当前位置: 首页 > news >正文

Python快速上手系列--日志模块--详解篇

前言

本篇主要说说日志模块,在写自动化测试框架的时候我们就需要用到这个模块了,方便我们快速的定位错误,了解软件的运行情况,更加顺畅的调试程序。

为什么要用到日志模块,直接print不就好了!那得写多少print出来,并且格式也不怎么美观。至于其他的作用,当然也有其他的办法可以替代,为了便捷,我们直接用logging模块一起做了。

1、logging可以设置不同的日志等级

2、可以指定如何输出及输出的位置应用场景:当我需要看大量的地方或者在一个文件中查看的时候,这时候print就不大方便了,所以 Python引入了logging模块来记录我想要的信息。

3、logging相对print来说更好控制输出在哪个地方,怎么输出及控制消息级别来过滤掉那些 不需要的信息 日志模块又分了等级:CRITICAL > ERROR > WARNING > INFO > DEBUG

参数

format: 指定输出的格式和内容,format可以输出很多有用信息,如上例所示:

  • %(levelno)s: 打印日志级别的数值

  • %(levelname)s: 打印日志级别名称

  • %(pathname)s: 打印当前执行程序的路径,其实就是sys.argv[0]

  • %(filename)s: 打印当前执行程序名

  • %(funcName)s: 打印日志的当前函数

  • %(lineno)d: 打印日志的当前行号

  • %(asctime)s: 打印日志的时间

  • %(thread)d: 打印线程ID

  • %(threadName)s: 打印线程名称

  • %(process)d: 打印进程ID

  • %(message)s: 打印日志信息

logging的四大组件

日志的四大组件:日志器、处理器、过滤器、格式器

# 创建日志器
log = logging.getLogger()
# # # 1、日志器设置输出日志级别,debug包括debug级别以上的都输出
log.setLevel(level=logging.ERROR)
# # 创建处理器,相当于实例化h = logging.StreamHandler()
# # 2、处理器设置输出级别》》》输出到控制台
h.setLevel(level=logging.DEBUG)
# # 文件中保存日志,可以指定D、C盘的路径
h = logging.FileHandler('托马.log',mode='a',encoding='utf-8')
# # 日志器添加处理器
log.addHandler(h)
log.error("error")
log.warning("warning")
log.debug("debug")
log.info("info")

上面事日志器,我们来看看格式器:与日志器类似的写法:

这里我将格式器日志器放在一块了。直接复制运行就能看到效果。还是比较容易的。

logging封装

""""

日志输出步骤

1、创建日志器

设置日志级别

2、创建处理器

控制台、文件

设置日志级别

3、创建格式器

想要打印的格式

4、日志器添加处理器

5、处理器添加格式器

6、日志器日志的输出

"""

class Log_object():

def __init__(self):# 构造函数初始化日志器

self.log = logging.getLogger()

self.log.setLevel(level=logging.DEBUG)

def set_Formatter(self):#格式器

self.f1= logging.Formatter(fmt='[%(asctime)s %(levelname)s %(filename)s:>>>%(message)s]')

self.f2 = logging.Formatter(fmt='[%(asctime)s %(levelname)s 行数:%(lineno)d:>>>%(message)s]')

return self.f1,self.f2

def add_StreamHandler(self):#控制台处理器

# 创建并初始化处理器

self.h = logging.StreamHandler()

# 设置处理器级别

self.h.setLevel(level=logging.WARNING)

#处理器添加格式器

self.h.setFormatter(self.set_Formatter()[0])

#日志器添加处理器

self.log.addHandler(self.h)

def add_FileHandler(self,file_name):#文件处理器

self.h = logging.FileHandler(file_name,mode='a',encoding='utf-8')

self.h.setLevel(level=logging.WARNING)

self.h.setFormatter(self.set_Formatter()[1])

self.log.addHandler(self.h)

# 同时调用以上两个方法

def get_log(self,file_name):

self.add_StreamHandler()

self.add_FileHandler(file_name)

return self.log

lg = Log_object()

# res = lg.get_log('封装日志.log')

# res.error("error")

# res.warning("warning")

# res.debug("debug")

# res.info("info")

除上述的写法之外呢,还可以用装饰器来写日志,前面我们学过装饰器,可以自己结合起来,打开脑洞来试试吧。

http://www.lryc.cn/news/9934.html

相关文章:

  • 【THREE.JS学习(1)】绘制一个可以旋转、放缩的立方体
  • 数仓实战 - 滴滴出行
  • python虚拟环境与环境变量
  • BeautifulSoup文档4-详细方法 | 用什么方法对文档树进行搜索?
  • 初识Tkinter界面设计
  • 软件测试面试题中的sql题目你会做吗?
  • VS实用调试技巧
  • 通俗易懂理解三次握手、四次挥手(TCP)
  • 1.1 什么是并发
  • 万字讲解你写的代码是如何跑起来的?
  • 034.Solidity入门——21不可变量
  • Vulnhub 渗透练习(四)—— Acid
  • C++ 在线工具
  • 使用MMDetection进行目标检测、实例和全景分割
  • 使用ThreadLocal实现当前登录信息的存取
  • 高通平台开发系列讲解(Android篇)AudioTrack音频流数据传输
  • BUUCTF-firmware1
  • 【C++之容器篇】二叉搜索树的理论与使用
  • 爬虫神级解析工具之XPath:用法详解及实战
  • Markdown编辑器
  • 数据结构<堆>
  • Linux下Socket编程利用多进程实现一台服务器与多台客户端并发通信
  • 【MySQL】数据库基础
  • Microsoft Office 2021 / 2019 Direct Download Links
  • XX 系统oracle RAC+ADG 数据库高可用容灾演练记录
  • JSP与Servlet
  • C++之迭代器
  • 2023-02-16:干活小计
  • Linux上安装LaTeX
  • webpack -- 无法将“webpack”项识别为 cmdlet