这样处理 Python 日志,优雅

news2025/1/13 15:40:35

bc6ee312190873571203fc6a778a322b.png

迷途小书童的Note

读完需要

4

分钟

速读仅需 2 分钟

1

   

loguru 简介

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

loguru 的优点包括

  • API 简单易用

  • 功能强大,内置多种高级日志功能

  • 高性能,速度快过标准 logging

  • 支持格式化日志输出

  • 方便地输出到文件

  • 自动记录异常栈跟踪

  • 添加过滤器控制日志级别

  • 旧日志自动归档压缩

2

   

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 参数控制日志级别,低于该级别的日志不会输出到指定文件中。

3

   

loguru 的高级用法

3.1

   

格式化日志

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

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

常用的变量包括

  • {time} 日志时间

  • {level} 日志等级

  • {message} 日志消息

  • {module} 模块名

  • {function} 函数名

3.2

   

过滤日志

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

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

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

3.3

   

异常栈跟踪

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

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

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

3.4

   

文件压缩与归档

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

4

   

loguru 与 logging 模块的比较

相比于 logging,loguru 具有以下优势

  • API 更简洁易用

  • 内置格式化日志和过滤器功能

  • 文件日志支持自动归档压缩

  • 无需定义 FORMATTER 和 FILTER,直接通过参数配置

  • 支持异常栈跟踪记录

  • 速度更快

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

5

   

总结

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

d633b0d6357afa70cf22f777c04608ae.jpeg

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/917172.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

HTML5岗位技能实训室建设方案

一 、系统概述 HTML5岗位技能技术是计算机类专业重要的核心课程,课程所包含的教学内容多,实践性强,并且相关技术更新快。传统的课堂讲授模式以教师为中心,学生被动式接收,难以调动学生学习的积极性和主动性。混合式教学…

Maven生命周期、阶段与目标

生命周期 对于Java项目来说,一个项目的生命周期可能会有创建项目、编译、打包、运行、部署等,而maven将项目的生命周期进行了标准化。 Maven默认支持的生命周期有clean、site、default,其中 site这个生命周期几乎用不到,最常用的…

Unity 图片资源的适配

前言 最近小编做Unity项目时,发现在资源处理这方面和Android有所不同;例如:Android的资源文件夹res下会有着mipmap-mdpi,mipmap-hdpi,mipmap-xhdpi,mipmap-xxhdpi,mipmap-xxxhdpi这五个文件夹&a…

java八股文面试[java基础]——Object类有哪些方法

通过IDEA打开Object类就可以看到 (1)clone方法 保护方法,实现对象的浅复制,只有实现了Cloneable接口才可以调用该方法,否则抛出CloneNotSupportedException异常。 主要是JAVA里除了8种基本类型传参数是值传递&#xf…

什么是缓存雪崩,什么是缓存穿透,什么是缓存击穿,如何解决 ?

目录 1. 什么是缓存雪崩?如何解决 ? 2. 什么是缓存穿透?如何解决 ? 3. 什么是缓存击穿?如何解决 ? 1. 什么是缓存雪崩?如何解决 ? 缓存雪崩是指在短时间内,有大量的缓存…

3D姿态相关的损失函数

loss_mpjpe: 计算预测3D关键点与真值之间的平均距离误差(MPJPE)。 loss_n_mpjpe: 计算去除尺度后预测3D关键点误差(N-MPJPE),评估结构误差。 loss_velocity: 计算3D关键点的速度/移动的误差,评估运动的平滑程度。 loss_limb_var: 计算肢体长度的方差,引导生成合理的肢体长度…

SpeedBI数据可视化工具:丰富图表,提高报表易读性

数据可视化工具一大作用就是能把复杂数据可视化、直观化,更容易看懂,也就更容易实现以数据驱动业务管理升级,因此一般的数据可视化工具都会提供大量图形化的数据可视化图表,以提高报表的易懂性,更好地服务企业运营决策…

AUTBUS全球首发,东土与您相约工博会

2023年中国国际工业博览会将于9月19日至9月23日在上海盛大举办。作为工博会重点参展企业之一,东土科技将重磅亮相6.1号馆工业自动化展(展位号:6.1H-D137)。 值得一提的是,AUTBUS 国际标准作为全球第一个基于时间敏感网…

微信开发之一键修改群公告的技术实现

简要描述: 设置群公告 请求URL: http://域名地址/setChatRoomAnnouncement 请求方式: POST 请求头Headers: Content-Type:application/jsonAuthorization:login接口返回 参数: 参数名必…

新华三重磅发布新一代智慧存储新品

8月22日,紫光股份旗下新华三集团以“重构 进化 启新境”为主题,成功举办新一代智慧存储新品发布会,重磅发布H3C/HPE Alletra MP全局解耦NVMe智能全闪存储、H3C UniStor X10000 G6系列分布式融合存储,基于全新技术架构打造强劲性能…

low-ui-vue前置解读|实现一个动态列的表格组件

最近另一个团队正式在项目中推广内部开发的low-ui组件库了,当然 还在内部阶段,但是太慢了。作为架子的设计者和部分功能的开发者,我决定先把常见的功能通过模仿的形式公开出来。避免大家搜索无果或者使用一些框架增加学习成本。 所谓动态列的…

剑指 Offer 40. 最小的k个数(C++实现)

剑指 Offer 40. 最小的k个数https://leetcode.cn/problems/zui-xiao-de-kge-shu-lcof/ 法1&#xff1a;二叉堆 通过最小堆&#xff0c;直接筛选出最小的k个数 vector<int> getLeastNumbers(vector<int>& arr, int k) {priority_queue<int, vector<int>…

在Eclipse中创建javaweb工程

新建动态web工程 点击project或other之后&#xff0c;如何快速找到Dynamic Web Project 填写工程名等详细信息 也许会出现下面的对话框 项目结构图

2023第四届中国白茶始祖文化节在世界白茶发源地福鼎举办

天下白茶&#xff0c; 源于太姥。农历七月初七&#xff0c;是中国白茶始祖太姥娘娘羽化成仙的纪念日&#xff0c;8月22日上午由福鼎市茶业协会、福鼎市中国白茶始祖太姥文化研究会指导&#xff0c;由福鼎市太姥山茶业商会主办&#xff0c;由福建省天湖茶业有限公司、福建品品香…

【日常积累】Linux中vi/vim的使用

概述 vim是由vi发展演变过来的文本编辑器&#xff0c;因其具有语法高亮显示、多视窗编辑、代码折叠、支持插件等功能&#xff0c;由于其功能相比vi来说更加强大&#xff0c;所以在实际工作中的使用更加广泛。 vim工作模式 Vim具有多种工作模式&#xff0c;常用的工作模式有&…

基于swing的校园茶餐厅java jsp点餐订餐管理mysql源代码

本项目为前几天收费帮学妹做的一个项目&#xff0c;Java EE JSP项目&#xff0c;在工作环境中基本使用不到&#xff0c;但是很多学校把这个当作编程入门的项目来做&#xff0c;故分享出本项目供初学者参考。 一、项目描述 基于swing的校园茶餐厅 系统有1权限 二、主要功能 …

Spring 自动装配机制详解

文章目录 一、手动装配二、自动装配1. XML 方式2. 注解方式 一、手动装配 首先知道 Spring 装配是干了件啥事&#xff1f;我的理解&#xff0c;它就是用来解决 bean 之间依赖关系的一个手段。 比如说我这里有一个 People 类和一个 Dog 类&#xff0c;People 依赖 Dog&#xff…

uniapp - 实现卡片式胶囊单选后右上角出现 “√“ 对勾对号选中效果功能,适用于小程序h5网页app全平台通用(一键复制组件源码,开箱即用!)

效果图 uniapp全平台兼容(小程序/h5网页/app)实现点击选择后,右上角出现 √ 对号效果(角标形式展现),功能组件, 改个样式,直接复制使用该组件。 组件源码 在 components 组件文件夹下,随便建立一个 .vue 文件,一键复制下方源码。

ModaHub魔搭社区:AI Agent在网络购物场景下的AgentBench基准测试

目录 AgentBench评估哪些场景? 近日,来自清华大学、俄亥俄州立大学和加州大学伯克利分校的研究者设计了一个测试工具——AgentBench,用于评估LLM在多维度开放式生成环境中的推理能力和决策能力。研究者对25个LLM进行了全面评估,包括基于API的商业模型和开源模型。 他们发现…

发力服务业务,龙湖集团半程领跑赢在“智慧”

成立三十载&#xff0c;龙湖集团一直是房地产行业“特立独行”的存在。 一方面&#xff0c;龙湖在对外战略方面长期量入为出&#xff0c;从不背上过重的“包袱”。 不久前&#xff0c;一则消息引发市场关注&#xff1a;龙湖集团提前偿还17亿元债务&#xff0c;已基本全部还清…