欢迎访问我的网站,希望内容对您有用,感兴趣的可以加入我们的社群。

这样处理Python日志,优雅

Python 迷途小书童 1年前 (2023-08-26) 766次浏览 0个评论

loguru简介

loguruPython 的一个第三方日志模块,相较于标准库 logging 模块,它提供了更简洁易用的 API,内置丰富的格式化、过滤、文件输出等高级功能。loguruPython 日志记录变得非常简单、Pythonic

loguru 的优点包括

  • API 简单易用
  • 功能强大,内置多种高级日志功能
  • 高性能,速度快过标准 logging
  • 支持格式化日志输出
  • 方便地输出到文件
  • 自动记录异常栈跟踪
  • 添加过滤器控制日志级别
  • 旧日志自动归档压缩

loguru的基本用法

loguru 的用法非常简单。首先,需要安装一下

pip install loguru

安装完成后,我们只需要导入模块,创建 logger,就可以开始打印日志了

from loguru import logger

logger.info("Hello, loguru!") 
logger.debug("This is a debug message.")

Python 标准 logging 模块不同,loguru 可以直接通过 logger 对象使用各个级别的日志方法,而不需要获取特定的 logger

日志默认输出到系统 stderr。我们可以通过 add() 方法指定输出日志文件的路径,如

logger.add("file_1.log") 
logger.add("file_2.log", level="WARNING")

level 参数控制日志级别,低于该级别的日志不会输出到指定文件中。

loguru的高级用法

格式化日志

loguru 支持通过 format 参数自定义日志内容和格式。我们可以使用各种变量来生成所需的日志格式

logger.add("debug.log", format="{time} {level} {message}", level="DEBUG")

常用的变量包括

  • {time} 日志时间
  • {level} 日志等级
  • {message} 日志消息
  • {module} 模块名
  • {function} 函数名

过滤日志

通过 filter 参数,我们可以定义过滤函数来精确控制哪些日志可以输出

logger.add("error.log", filter=lambda record: record["extra"].get("error_type") == "OSError")

这样只有当日志的 error_type 字段为 OSError 时,才会输出到 error.log

异常栈跟踪

loguru 可以非常方便地记录异常栈跟踪信息,

try:
  1/0
except ZeroDivisionError:
  logger.exception("Division by zero!")

exception 方法会自动捕获异常栈到日志中。

文件压缩与归档

日志文件到达大小限制后,loguru 会自动压缩归档,并创建新的日志文件,之前的日志也不会丢失。

loguru与logging模块的比较

相比于 loggingloguru 具有以下优势

  • API 更简洁易用
  • 内置格式化日志和过滤器功能
  • 文件日志支持自动归档压缩
  • 无需定义 FORMATTERFILTER,直接通过参数配置
  • 支持异常栈跟踪记录
  • 速度更快

所以,loguru 在易用性和功能性上都优于 logging

总结

loguru 是一个非常好用的 Python 日志模块,提供了简洁强大的日志功能。它的简单 API、灵活过滤、文件处理等特性可以大大方便日志记录工作。希望本文可以让大家对 loguru 有一个初步的了解,并可以利用它来提升项目的日志能力,更多高级用法请参考 loguru 的官方文档,https://github.com/Delgan/loguru

喜欢 (0)

您必须 登录 才能发表评论!