python+pytest接口自动化之日志管理模块loguru简介

python自带日志管理模块logging,使用时可进行模块化配置

logging配置起来比较繁琐,且在多进行多线程等场景下使用时,如果不经过特殊处理,则容易出现日志丢失或记录错乱的情况。

python中有一个用起来非常简便的第三方日志管理模块--loguru,不仅可以避免logging的繁琐配置,而且可以很简单地避免在logging中多进程多线程记录日志时出现的问题,甚至还可以自定义控制台输出的日志颜色。

接下来我们来学习怎么使用loguru模块进行日志管理。

安装

第三方模块,需要先安装,安装命令如下:

1

pip install loguru

简单示例

简单使用示例如下:

1

2

3

4

5

6

7

8

9

10

from loguru import logger

# 日志写入文件则需使用add()方法,"../log/test.log"即日志文件路径,可自定义。

# 写入文件的日志里有中文的话,需要加上encoding="utf-8",否则会显示乱码。

logger.add("../log/test.log", encoding="utf-8", rotation="500MB",

           enqueue=True, retention="7 days")

# 打印不同类型的日志

logger.debug("这是一段debug级别日志")

logger.info("这是一段info级别日志")

logger.warning("这是一段warning级别日志")

logger.critical("这是一段critical级别日志")

上面的示例代码运行之后,会在控制台打印如下日志:

同时也会在 "../log/test.log" 路径中写入日志,如下:

由以上结果可以看出:

  • loguru中直接提供了一个日志记录对象logger,拿来即用;
  • loguru默认的输出格式为:时间 | 级别 | 模块名 | 行号 | 日志信息;
  • 不同级别的日志在控制台显示颜色不一样。

当然,在实际项目中我们还需要日志管理器有更丰富的配置,loguru中的add()方法便具有强大的配置功能,接下来介绍add()方法提供的常用配置功能。

add()常用参数说明

loguru模块源码中add()方法的参数如下:

sink(官方文档简单翻译如下):

  • 可以传入类file对象,如sys.stderr或者open('test.log', 'w')
  • 可以传入文件路径strpathlib,如示例代码中的写入日志文件路径。路径可以使用一些附加参数对其进行参数化,如test_{time}.log{time}即时间参数,创建文件时文件名称中会加入时间。
  • 可以传入像lambda这样的可调用函数的简单函数,如lambda msg:print(msg)。这允许完全由用户偏好和需求定义日志记录过程。
  • 还可以是使用async def语句定义的异步协程函数。该函数返回的协程对象将使用loop.create_task()添加到事件循环中。在使用complete()结束循环之前,应该等待这些任务。
  • 也支持传入logging模块的Handler,如FileHandlerStreamHandler等,Loguru记录会自动转换为日志模块预期的结构。

level:发送到sink的日志消息的最低日志级别,即输出的最低日志级别。

format:定义日志的输出格式。

filter:过滤日志。

colorize:终端日志输出的颜色。

serializer:bool值,输出日志时是否先格式化成JSON数据格式。

backtrace:bool值,是否进行异常跟踪(即backtrace信息记录)。

diagnose:bool值,异常跟踪是否应显示变量值以简化调试。在生产中应将其设置为False,以避免泄漏敏感数据。

enqueue:bool值,日志消息输出之前是否先通过多进程安全队列,多进程多线程运行写入日志时需用到,避免日志记录丢失或混乱。

catch:bool值,是否自动捕获接收器处理日志消息时发生的错误。如果为True,则在sys上显示异常消息。

继续看loguru模块源码,如下:

即我们需要将日志写入指定的文件时,可以使用截图中新增的参数。常用的参数说明如下:

rotation:指定日志文件记录条件,日志输出太多需要隔一段时间写入新文件时适用。

1

2

3

4

5

6

# rotation指定日志文件最大为500MB,超过则新建文件记录日志

logger.add("../log/test.log", rotation="500MB")

# 指定每天12:00新建日志记录文件:rotation="12:00"

# 指定每隔10天新建日志记录文件:rotation="10 days"

# 指定每隔一个星期新建日志记录文件:rotation="1 week"

# 指定每隔两个月新建日志记录文件:rotation="2 months"

retention:指定日志保留时长,会清除超过指定时长的数据。

1

2

# rotation指定日志保留时长,如"1 week", "3 days", "2 months"

logger.add("../log/test.log", retention="10 days")

compression:配置文件压缩格式。

1

2

# rotation指定日志保留时长,如"gz", "bz2", "xz", "lzma", "tar", "tar.gz", "tar.bz2", "tar.xz", "zip"

logger.add("../log/test.log", compression="zip")

encoding:指定写入文件时的编码格式,这在示例代码中已说明。

使用

接下来,我们使用常用的参数来组合定义日志记录方式。

1

2

3

4

5

6

7

8

9

10

11

12

from loguru import logger

import sys

# format建议直接使用默认的格式

logger.add("../log/test_{time}.log", level="INFO", encoding="utf-8", enqueue=True, rotation="500MB", retention="1 week")

# 当然也可以自定义format,如下示例

# logger.add("../log/test_{time}.log",

            format="{time:YYYY-MM-DD HH:mm:ss} | {level} | {name} | {line} | {message}", encoding="utf-8",              enqueue=True, rotation="500MB", retention="1 week")

# 打印不同类型的日志

logger.debug("这是一段debug级别日志")

logger.info("这是一段info级别日志")

logger.warning("这是一段warning级别日志")

logger.critical("这是一段critical级别日志")

参数说明:

  • sink="../log/test_{time}.log",即指定日志文件路径,且加入了{time},创建.log文件时名称会加上时间。
  • level="INFO",写入文件时只会写入INFO及以上级别的日志 (需要大写),即INFO、WARNING、CRITICAL。
  • encoding="utf-8",日志写入文件时指定编码格式为"utf-8",否则有中文的话会显示乱码。
  • enqueue=True,支持多线程多进程执行时按照队列写入。
  • rotation="500MB",日志文件最大为500MB,超过则新建。
  • retention="1 week",日志保留一周,过后则清除。
  • format没有指定即使用默认格式,建议直接使用默认的格式,见代码注释。

执行代码后,结果如下:

从结果中可以看出来,输出内容中模块部分显示的是如__main__:<module>:20的形式,而并不是我们想要看到的对应的模块名称,这是因为直接执运行了当前文件的文件,如果是其他模块调用执行便会显示对应的模块名称。

​现在我也找了很多测试的朋友,做了一个分享技术的交流群,共享了很多我们收集的技术文档和视频教程。
如果你不想再体验自学时找不到资源,没人解答问题,坚持几天便放弃的感受
可以加入我们一起交流。而且还有很多在自动化,性能,安全,测试开发等等方面有一定建树的技术大牛
分享他们的经验,还会分享很多直播讲座和技术沙龙
可以免费学习!划重点!开源的!!!
qq群号:485187702【暗号:csdn11】

最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走! 希望能帮助到你!【100%无套路免费领取】

  • 18
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python Loguru 是一个易于使用的日志库,它提供了简洁的语法和强大的功能,可以帮助开发者在应用程序中记录和管理日志Loguru 具有以下特点: 1. 简洁的语法:Loguru 提供了简单直观的 API,使得记录日志变得轻而易举。开发者可以使用类似于 print 函数的语法来记录日志,而无需担心繁琐的配置。 2. 强大的功能:Loguru 支持将日志输出到控制台、文件、网络和其他自定义目标。开发者可以根据自己的需求配置不同的输出方式和格式。 3. 自动回滚:Loguru 具备自动回滚功能,可以根据配置的大小或时间进行日志文件的分割和归档,避免日志文件过大或过长。 4. 异常追踪:Loguru 提供了异常追踪功能,可以方便地记录和追踪应用程序中的异常信息,帮助开发者快速定位和修复问题。 5. 上下文管理Loguru 支持上下文管理,可以在日志中添加上下文信息,如请求 ID、用户 ID 等,方便开发者跟踪和调试应用程序。 使用 Loguru 非常简单,只需要在代码中导入 loguru 模块,并使用 loguru.logloguru.logger 对象来记录日志即可。 下面是一个使用 Loguru 记录日志的示例: ```python import loguru loguru.logger.add("file.log") # 将日志输出到文件 loguru.logger.info("This is an info message") # 记录一条信息日志 loguru.logger.warning("This is a warning message") # 记录一条警告日志 loguru.logger.error("This is an error message") # 记录一条错误日志 ``` 以上是 Loguru 的一些基本用法,你还可以通过配置文件或函数参数来自定义日志记录的行为。详细的用法和更多功能请参考 Loguru 官方文档。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值