微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

前言:

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

一、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配合之后,打出的日志,详细到哪个文件文件绝对路径,报错行号,以及出错的原因在这一行的哪里,这样我们在分析问题的时候,就能直接去对应的文件,找对应的行号,对应出错的地方进行检查了

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐