自动化测试-自定义日志类及日志封装(实战)

前言

在自定义日志之前,需要了解如下信息:

日志收集器:可以理解为用于收集日志信息的容器;
日志级别(Level):DEBUG、INFO、WARNING、ERROR以及CRITICAL
输出渠道(Handle):控制台输出,StreamHandle
将日志信息保存在文件中:FileHandle

日志格式(Format):
一般包含如下信息:日志时间-日志名称-日志级别名称-文件名称-行号-日志信息等

示例:


# 设置日志的输出格式

fmt = "%(asctime)s %(name)s %(levelname)s %(filename)s-%(lineno)d:%(message)s"

formatter = logging.Formatter(fmt)

说明:
logging模块中,默认的是root日志收集器,默认的输出级别为:WARNING

自定义日志的操作流程

导入logging模块:import logging
创建日志收集器:logger = logging.getLogger(“日志收集器的name”)
设置日志收集器的日志级别:logger.setLevel(logging.INFO) #设置收集器的级别为INFO

给日志收集器创建输出渠道(根据第一部分的内容知:日志输出渠道包含控制台输出和文件输出):下面以控制台输出为例进行介绍,文件输出与之类似

创建日志的输出渠道:handle1 = logging.StreamHandle()

可以单独设置日志输出渠道的级别:handle1.setLevel(logging.ERROR) 此步骤可选

说明:
在未设置日志输出渠道的日志级别时,默认使用日志收集器设置的Level

若需单独设置日志输出渠道的日志级别,则它的日志级别需高于日志收集器级别,否则设置无效。

设置日志输出的内容格式:


# 4、设置日志的输出格式

fmt = "%(asctime)s %(name)s %(levelname)s %(filename)s-%(lineno)d:%(message)s"

ormatter = logging.Formatter(fmt)

将设置的日志格式绑定到创建的输出渠道中,即将日志格式与输出渠道关联起来

handler1.setFormatter(formatter)

将设置好的输出渠道,添加到日志收集器中

logger.addHandler(handler1)

补充:将日志信息输出到文件的操作流程与之类似,只是和上面有一点区别而已

handler2 = logging.FileHandler(filename="xxx.log",encoding="utf-8")

代码实现


import logging


# 1、创建日志收集器

logger = logging.getLogger(name="login_test")


# 2、设置日志收集器的级别:警告级别

logger.setLevel(logging.WARN)


# 3、设置日志的输出渠道

# 3.1 控制台日志输出

handler1 = logging.StreamHandler()

# 3.2 文件日志输出

handler2 = logging.FileHandler(filename="my_log.log",encoding="utf-8")

# 单独设置输出渠道的日志级别

handler1.setLevel(logging.ERROR) # 可选


# 4、设置日志的输出格式

fmt = "%(asctime)s %(name)s %(levelname)s %(filename)s-%(lineno)d:%(message)s"

formatter = logging.Formatter(fmt)


# 5、关联3和4

handler1.setFormatter(formatter)

handler2.setFormatter(formatter)


# 6、关联1和5

logger.addHandler(handler1)

logger.addHandler(handler2)


# 测试

logger.warning("登录失败警告")

logger.error("登录debug出错")

自定义日志的封装

由于自定义日志的操作流程相对比较固定,因此我们可以将自定义的日志封装成一个类。当我们需要使用时,只需引入该模块即可。

通过查看源码知,封装的类需要继承logging.Logger类,这样就可以继承父类的debug()、info()等函数;

从第二部分的操作流程知,不同的用户在引入该模块时,可能会设置不同日志名称、日志级别以及日志文件信息,因此这些参数可以让用户在实例化日志对象对象时进行初始化设置;

当我们需要使用自定义的日志类时,引入这一模块即可。


import logging


# 对日志的操作进行封装

class MyLogger(logging.Logger):


def __init__(self,name,level,file=None):

super().__init__(name,level)

# 设置日志的输出渠道

handler1 = logging.StreamHandler()

# 设置日志的输出格式

fmt = "%(asctime)s %(name)s %(levelname)s %(filename)s-%(lineno)d:%(message)s"

formatter = logging.Formatter(fmt)

handler1.setFormatter(formatter)

# 添加日志的输出渠道

self.addHandler(handler1)


if file:

handler2 = logging.FileHandler(filename=file,encoding="utf-8")

handler2.setFormatter(formatter)

self.addHandler(handler2)

pass

pass

pass

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!

  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值