Python—12.2、loguru模块

本文介绍了Python日志库Loguru的使用,包括基础配置、日志级别、格式化、异常处理等功能,并展示了如何进行日志分割、保留与压缩。Loguru以其简洁的API和强大的功能,提供了比标准logging更友好的日志记录体验。
摘要由CSDN通过智能技术生成

官网文档:https://loguru.readthedocs.io/en/stable/

概念简介

loguru 模块可以实现和 logging 类似的功能,配置上更加简单便捷;

代码引入

  • 安装类库
pip install loguru

loguru的主要目标是给开发者带来愉快的日志记录体验,因此类库基本做到了开箱即用;

"""
@DevTool  : PyCharm
@Author   : xxx
@DateTime : 2023/6/15 09:38
@FileName : run_pro.py.py
"""
# -*- coding= utf-8 -*-

from loguru import logger

logger.debug('debug log message!')
logger.info('info log message!')
logger.warning('warn log message!')
logger.error('error log message!')
logger.critical('critical log message!')

控制台输出:

2023-06-15 09:24:54.902 | DEBUG    | __main__:<module>:9 - debug log message!
2023-06-15 09:24:54.902 | INFO     | __main__:<module>:10 - info log message!
2023-06-15 09:24:54.902 | WARNING  | __main__:<module>:11 - warn log message!
2023-06-15 09:24:54.902 | ERROR    | __main__:<module>:12 - error log message!
2023-06-15 09:24:54.903 | CRITICAL | __main__:<module>:13 - critical log message!

Process finished with exit code 0

可以看到不需要手动设置,Loguru 会提前配置一些基础信息,自动输出时间、日志级别、模块名、行号等信息,而且根据等级的不同,还自动设置了不同的颜色,方便观察,真正做到了开箱即用!

  • 规则定义
    通过 add() / remove()方法可以自定义日志级别,自定义日志格式,保存日志到文件;无需像 logging 库一样需要定义 Handler、Formatter等;

进阶使用

  • 方法参数
add(sink, *, level='DEBUG', format='<green>{time:YYYY-MM-DD HH:mm:ss.SSS}</green> | <level>{level: <8}</level> | <cyan>{name}</cyan>:<cyan>{function}</cyan>:<cyan>{line}</cyan> - <level>{message}</level>', filter=None, colorize=None, serialize=False, backtrace=True, diagnose=True, enqueue=False, catch=True, **kwargs)

基本参数释义:

  • sink:可以是一个 file 对象,如 sys.stderr 或 open(‘file.log’, ‘w’),也可以是 str 字符串或者 pathlib.Path 对象,即文件路径,也可以是一个方法,可以自行定义输出实现,也可以是一个 logging 模块的 Handler,比如 FileHandler、StreamHandler 等,还可以是 coroutine function,即一个返回协程对象的函数等。

  • level:日志输出和保存级别。

  • format:日志格式模板。

  • filter:一个可选的指令,用于决定每个记录的消息是否应该发送到 sink。

  • colorize:格式化消息中包含的颜色标记是否应转换为用于终端着色的 ansi 代码,或以其他方式剥离。 如果没有,则根据 sink 是否为 tty(电传打字机缩写) 自动做出选择。

  • serialize:在发送到 sink 之前,是否应首先将记录的消息转换为 JSON 字符串。

  • backtrace:格式化的异常跟踪是否应该向上扩展,超出捕获点,以显示生成错误的完整堆栈跟踪。

  • diagnose:异常跟踪是否应显示变量值以简化调试。建议在生产环境中设置 False,避免泄露敏感数据。

  • enqueue:要记录的消息是否应在到达 sink 之前首先通过多进程安全队列,这在通过多个进程记录到文件时很有用,这样做的好处还在于使日志记录调用是非阻塞的。

  • catch:是否应自动捕获 sink 处理日志消息时发生的错误,如果为 True,则会在 sys.stderr 上显示异常消息,但该异常不会传播到 sink,从而防止应用程序崩溃。
    **kwargs:仅对配置协程或文件接收器有效的附加参数(见下文)。
    当且仅当 sink 是协程函数时,以下参数适用:

  • loop:将在其中调度和执行异步日志记录任务的事件循环。如果为 None,将使用 asyncio.get_event_loop() 返回的循环。


当且仅当 sink 是文件路径时,以下参数适用

  • rotation:一种条件,指示何时应关闭当前记录的文件并开始新的文件。
  • **retention **:过滤旧文件的指令,在循环或程序结束期间会删除旧文件。
  • compression:日志文件在关闭时应转换为的压缩或存档格式。
  • delay:是在配置 sink 后立即创建文件,还是延迟到第一条记录的消息时再创建。默认为 False。
  • mode:内置 open() 函数的打开模式,默认为 a(以追加模式打开文件)。
  • buffering:内置 open() 函数的缓冲策略,默认为1(行缓冲文件)。
  • encoding:内置 open() 函数的文件编码,如果 None,则默认为 locale.getpreferredencoding()。
  • **kwargs:其他传递给内置 open() 函数的参数。

参数样例

  • rotation 日志分割
# 每天 0 点产生一个新的日志文件
logger.add('apprun_{time}.log', rotation='00:00')

# 按照大小每50mb产生一个新的日志文件
logger.add('apprun_{time}.log', rotation='50 MB')

# 按照时间 每周产生一个新的日志文件
logger.add('apprun_{time}.log', rotation='1 week')
  • retention 日志保留
# 日志文件保留15天时间
logger.add('apprun_{time}.log', retention='15 days')

# 按照日志文件数量,最多保留10个
logger.add('apprun_{time}.log', retention=10)

# 按照日志文件数量,最多保留10个
logger.add('apprun_{time}.log', retention=10)
  • compression 日志压缩
# 日志文件按照 zip格式压缩
logger.add('apprun_{time}.log', compression='zip')

支持的压缩格式:gzbz2xzlzmatartar.gztar.bz2tar.xz

  • 引用参数
logger.info('If you are using Python {}, prefer {feature} of course!', 3.6, feature='f-strings')

此处相当于 str.format();

  • 常规配置
logger.add(sink="logTrack.log", level="INFO", format="{time:YYYY-MM-DD HH:mm:ss} | {level} |:{message}")
  • 异常追溯

在 Loguru 里可以直接使用它提供的装饰器进行异常捕获,而且得到的日志是非常详细;


from loguru import logger

@logger.catch()
def ruglarFun(x, y):
    logger.info('this is first step of function!')
    v_result = x / y
    return v_result

ruglarFun(3,"a")

日志信息:

2023-06-15 09:57:17.126 | INFO     | __main__:ruglarFun:14 - this first step of function!
2023-06-15 09:57:17.126 | ERROR    | __main__:<module>:18 - An error has been caught in function '<module>', process 'MainProcess' (27768), thread 'MainThread' (30592):
Traceback (most recent call last):

> File "E:\PythonProject\CodeConfirm\run_pro.py", line 18, in <module>
    ruglarFun(3,"a")<function ruglarFun at 0x0000021C02820430>

  File "E:\PythonProject\CodeConfirm\run_pro.py", line 15, in ruglarFun
    v_result = x / y
               │   └ 'a'3

TypeError: unsupported operand type(s) for /: 'int' and 'str'

Process finished with exit code 0

======================================== over ========================================

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值