自动化框架之Python日志模块二次封装技巧分享

前言:

在我们做测试自动化框架设计的时候,需要对日志模块进行二次开发,以方便我们后面进行关键日志记录和报错日志排查,本章主要分享我在对日志做二次封装过程中的一些小技巧和方法

目录

一、logging模块简介

二、logging模块日志级别划分

三、logging模块定义的模块级别的常用函数

四、logging模块四大组件类

五、logging模块使用常用流程

六、logging模块二次封装

七、查看封装后的日志使用效果


一、logging模块简介

logging日志模块与print的区别:

①  logging可以设置不同的日志级别

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

③  logging相对print来说更好控制输出在哪个地方,怎么输出及控制消息级别来过滤掉那些不需要的信息

二、logging模块日志级别划分

级别排序:DEBUG<INFO<WARNING<ERROR<CRITICAL

①  DEBUG:最详细的日志信息,典型应用场景是 问题诊断

②  INFO:信息详细程度仅次于DEBUG,通常只记录关键节点信息,用于确认一切都是按照我们预期的那样进行工作

③  WARNING:当某些不期望的事情发生时记录的信息(如,磁盘可用空间较低),但是此时应用程序还是正常运行的

④  ERROR:由于一个更严重的问题导致某些功能不能正常运行时记录的信息

⑤  CRITICAL:当发生严重错误,导致应用程序不能继续运行时记录的信息

三、logging模块定义的模块级别的常用函数

①  logging.debug(msg,*args,**kwargs)
    创建一条严重级别为DEBUG的日志记录

②  logging.info(msg,*args,**kwargs)
    创建一条严重级别为INFO的日志记录

③  logging.warning(msg,*args,**kwargs)
    创建一条严重程度为WARNIN的日志记录

④  logging.error(msg,*args,**kwargs)
    创建一条严重程度为ERROR的日志记录

⑤  logging.critical(msg,*args,**kwargs)
    创建一条严重程度为CRITICAL的日志记录

⑥  logging.log(level,*args,**kwargs)
    创建一条严重级别为level的日志记录

⑦  logging.basicConfig(**kwargs)
    对root logger进行一次性配置

四、logging模块四大组件类

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

  1. 日志器:logger,提供了应用程序可一直使用的接口
  2. 处理器:Handler,将logger创建的日志记录发送到合适的目的输出
  3. 过滤器:Filter,提供了更细粒度的控制工具来决定输出哪条日志记录,丢弃哪条日志记录
  4. 格式器:Formatter,决定日志记录的最终输出格式

五、logging模块使用常用流程

六、logging模块二次封装

本次封装思想就是将上面流程各部分进行方法封装,最后再进行组合调用

具体流程大致为创建日志器=》设置日志级别=〉封装格式器=》封装控制台处理器=〉封装文件处理器=》调用控制台处理器和文件处理器并返还日志器

这样我们在调用最后一个方法的时候,就相当于在日志器里面,添加了我们所要的格式,添加了文件处理器和控制台处理器,这样我们在进行日志器调用的时候,不用现场进行组装和设置格式

接下来进行详细讲解封装步骤:

首先我们先将logging模块和traceback模块导到文件里面,然后构造方法里面参数给log将要写到的位置,当然后面我们在实际框架设计的时候,这个地方的文件路径都会写到配置文件里面进行管理,由于这里做演示,就不讲配置文件如何调用了

这里的构造方法里面,我们创建了日志器和设置了对应的日志级别,由于我们最后想要的带固定格式的日志,然后想让它在控制台打印,又想要在日志文件中记录,这就需要添加三个方法了

第一个要添加的方法是格式器,这个会用在我们设置日志打印格式上面:

这里我们返回了两种格式的格式器,这里按需封装,一般一个就可以了,对应个时期里面包含哪些信息,这个可以参考logging.Formatter里面的源码:

选择需要的参数添加进去就可以了

然后我们需要添加控制台处理器和文件处理器,用于我们后面在文件写日志和在控制台打印日志:

注意这里的文件处理器是需要传入日志文件路径的,需要将构造方法里面的参数给它

最后我们将日志器返还回去

这一步相当于在返还日志器的时候,调用了setStramHandle和setFileHandle方法,相当于给日志器添加了这两个属性,同时这两个方法里面,又各自设置了各自的格式器,并添加了各自输出的日志级别,其中文件处理器记录的是INFO级别以上的日志信息,控制台处理器打印DEBUIG级别以上的日志

在我们做类设计的时候,还需要考虑我们后面调用的方便性,所以在文件最后,重新写了一个方法,该方法实例化了我们封装的日志模块,后面我们调用直接调这个函数就行

七、查看封装后的日志使用效果

这里使用了traceback模块抛出了很详细的日志内容,我们可以对比一下不使用traceback抛出的异常情况

上面是使用异常处理后抛出的Exception异常,我们看到这个就只有一句话,其实对于我们更好更快的分析报错原因,总是觉得差了点什么,下面介绍使用traceback配合打印日志

 

我们看到使用traceback之后打出的日志就很详细了,使用前的日志就只是一句报错,没有文件信息,没有报错位置,使用traceback配合之后,打出的日志,详细到哪个文件,文件的绝对路径,报错行号,以及出错的原因在这一行的哪里,这样我们在分析问题的时候,就能直接去对应的文件,找对应的行号,对应出错的地方进行检查了

  • 5
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值