Loguru:Python中强大的日志库

目录

一、Loguru的安装

二、Loguru的使用

2.1 日志级别的设置

2.2 日志的输出格式

2.3 日志轮转与压缩

2.4 日志的彩色输出

2.5 在生产环境中使用Loguru

2.6 日志的过滤和搜索

2.7 日志的自定义格式化

2.8 日志的上下文信息

2.9 日志的异步处理

2.10 日志的搜索和筛选

2.11 日志的持久化存储

总结


在Python中,日志记录是一种重要的调试和分析工具。Loguru是Python中一个流行的日志库,它提供了强大的日志记录功能,使得开发人员能够轻松地跟踪和调试代码。本文将介绍Loguru的安装和使用,并通过示例演示其基本功能和高级特性。

一、Loguru的安装

Loguru可以通过pip进行安装,打开终端或命令提示符,输入以下命令即可完成安装:

pip install loguru

二、Loguru的使用

2.1 日志级别的设置

Loguru支持多种日志级别,包括debug、info、warning、error和critical等级别。通过设置日志级别,您可以控制日志输出的详细程度。在Loguru中,您可以使用logger.add_level()方法添加自定义日志级别。以下是一个示例:

from loguru import logger  
  
logger.add_level(20, "Custom Level")  
logger.set_level(20)  # 设置日志级别为Custom Level  
logger.debug("This is a debug message")  # 不会输出,因为级别低于设置的Custom Level  
logger.info("This is an info message")  # 不会输出,因为级别低于设置的Custom Level  
logger.CustomLevel("This is a message from custom level")  # 输出,因为级别等于设置的Custom Level

2.2 日志的输出格式

Loguru允许您自定义日志的输出格式。您可以通过设置logger.formatter来指定日志的输出格式。以下是一个示例:

from loguru import logger  
from datetime import datetime  
  
logger.add_handler(logger.FileHandler("log.txt", mode="a"))  # 添加文件日志处理器  
logger.set_level(10)  # 设置日志级别为info  
logger.formatter = (  
    "{asctime} - {name} - {level} - {message}"  
)  # 设置日志输出格式,包括时间、名称、级别和消息  
logger.info("This is an info message")  # 输出:2023-07-05 14:30:00 - __main__ - INFO - This is an info message

2.3 日志轮转与压缩

Loguru提供了日志轮转和压缩的功能,可以帮助您管理大量的日志文件。通过设置FileHandler的rotation参数,您可以指定日志文件的最大大小和保留日志文件的数量。以下是一个示例:

from loguru import logger  
from datetime import datetime, timedelta  
import os  
  
filename = "log.txt"  # 日志文件名  
max_bytes = 1024 * 1024 * 10  # 10MB  
backup_count = 5  # 保留5个日志文件  
handler = logger.FileHandler(filename, mode="a", rotation=(max_bytes, backup_count))  # 添加日志处理器并设置轮转参数  
logger.add_handler(handler)  # 添加日志处理器到logger对象中  
logger.set_level(10)  # 设置日志级别为info  
logger.info("This is an info message")  # 输出:2023-07-05 14:30:00 - __main__ - INFO - This is an info message

2.4 日志的彩色输出

Loguru还支持日志的彩色输出,使得日志在控制台显示时更加易读和美观。您可以通过设置logger.colored参数来开启或关闭彩色日志输出。以下是一个示例:

from loguru import logger  
  
logger.add_handler(logger.StreamHandler())  # 添加控制台日志处理器  
logger.set_level(10)  # 设置日志级别为info  
logger.colored = True  # 开启彩色日志输出  
logger.info("This is an info message")  # 输出:INFO This is an info message

2.5 在生产环境中使用Loguru

在生产环境中,您可能希望将日志记录到文件中,而不是输出到控制台。Loguru提供了FileHandler类来处理这种情况。以下是一个示例:

from loguru import logger  
  
logger.add_handler(logger.FileHandler("production.log", mode="a"))  # 添加文件日志处理器  
logger.set_level(10)  # 设置日志级别为info  
logger.info("This is a production message")  # 日志将写入到production.log文件中

2.6 日志的过滤和搜索

Loguru还提供了强大的日志过滤和搜索功能。您可以使用logger.filter()方法来设置自定义的过滤器,只记录符合特定条件的日志。以下是一个示例:

from loguru import logger  
import re  
  
logger.add_handler(logger.FileHandler("log.txt", mode="a"))  # 添加文件日志处理器  
logger.set_level(10)  # 设置日志级别为info  
logger.filter(r"^\w+/(?!ignore).*")  # 过滤掉所有路径中包含"ignore"的文件日志  
logger.info("This is an info message")  # 日志将写入到log.txt文件中,但不会被过滤掉

2.7 日志的自定义格式化

除了之前提到的formatter参数外,Loguru还允许您在每个日志处理器上自定义日志的格式化方式。这可以通过设置handler.formatter来实现。以下是一个示例:

from loguru import logger  
from datetime import datetime  
  
logger.add_handler(logger.FileHandler("log.txt", mode="a"))  # 添加文件日志处理器  
logger.set_level(10)  # 设置日志级别为info  
  
handler = logger.handlers[0]  # 获取文件日志处理器  
handler.formatter = (  
    "{asctime} - {name} - {level} - {message}"  
)  # 设置日志输出格式,包括时间、名称、级别和消息  
logger.info("This is an info message")  # 输出:2023-07-05 14:30:00 - __main__ - INFO - This is an info message

2.8 日志的上下文信息

Loguru支持在日志中添加上下文信息,这对于跟踪特定事件非常有用。您可以使用logger.bind()方法来绑定上下文信息,然后在日志消息中使用占位符来引用这些信息。以下是一个示例:

from loguru import logger  
  
logger.add_handler(logger.FileHandler("log.txt", mode="a"))  # 添加文件日志处理器  
logger.set_level(10)  # 设置日志级别为info  
  
with logger.bind(user_id=123, action="view"):  # 绑定上下文信息  
    logger.info("User {user_id} performed action {action}")  # 日志消息中包含上下文信息

2.9 日志的异步处理

对于需要处理大量日志或需要异步操作的情况,Loguru提供了异步日志处理功能。您可以使用AsyncHandler类来创建一个异步日志处理器,然后将它添加到logger对象中。以下是一个示例:

from loguru import logger  
import asyncio  
  
async def async_handler(record):  
    await asyncio.sleep(1)  # 模拟异步操作  
    print(record)  # 处理日志记录  
  
logger.add_handler(AsyncHandler(async_handler))  # 添加异步日志处理器  
logger.set_level(10)  # 设置日志级别为info  
logger.info("This is an async message")  # 日志将异步处理,不会阻塞主线程

2.10 日志的搜索和筛选

Loguru提供了强大的日志搜索和筛选功能。您可以使用logger.search()方法来搜索特定的日志消息。此外,您还可以使用logger.filter()方法来筛选符合特定条件的日志。以下是一个示例:

from loguru import logger  
  
logger.add_handler(logger.FileHandler("log.txt", mode="a"))  # 添加文件日志处理器  
logger.set_level(10)  # 设置日志级别为info  
logger.info("This is an info message")  # 输出:2023-07-05 14:30:00 - __main__ - INFO - This is an info message  
  
# 搜索特定的日志消息  
result = logger.search("info message")  
print(result)  # 输出:['2023-07-05 14:30:00 - __main__ - INFO - This is an info message']  
  
# 筛选特定条件的日志  
result = logger.filter(level=10).all()  # 筛选所有级别为10的日志  
print(result)  # 输出:['2023-07-05 14:30:00 - __main__ - INFO - This is an info message']

2.11 日志的持久化存储

Loguru支持将日志消息持久化存储到数据库或其他存储系统中。您可以使用Loguru提供的插件或第三方库来实现这一功能。以下是一个示例:

from loguru import logger  
import redis  
  
# 创建一个Redis存储对象  
redis_store = redis.Redis(host='localhost', port=6379, db=0)  
  
# 将日志消息存储到Redis中  
logger.add_store(redis_store, level=10)  # 添加Redis存储处理器,级别为10  
logger.set_level(10)  # 设置日志级别为info  
logger.info("This is an info message")  # 日志将存储到Redis中

总结

Loguru是一个功能强大的Python日志库,提供了丰富的日志处理功能,包括灵活的日志处理器配置、上下文信息绑定、搜索、存储、导出和导入等。同时,Loguru还具有良好的性能表现和扩展性,方便用户根据需要进行自定义扩展。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

数据库事务相关问题

1. 什么是数据库事务? 事务,由一个有限的数据库操作序列构成,这些操作要么全部执行,要么全部不执行,是一个不可分割的工作单位。 假如A转账给B 100 元,先从A的账户里扣除 100 元,再在 B 的账户上加上 100 …

一道 python 数据分析的题目

python 数据分析的题目。 做题方法:使用 pandas 读取数据,然后分析。 知识点:pandas,正则表达式,py知识。 过程:不断使用 GPT,遇到有问题的地方自己分析,把分析的结果告诉 GPT&am…

Android修行手册 - 阴影效果的几种实现以及一些特别注意点

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例点击跳转>软考全系列点击跳转>蓝桥系列点击跳转>ChatGPT和AIGC 👉关于作者 专…

文生图算法评价

1.sd_eval stable diffusion模型评价框架_Kun Li的博客-CSDN博客文章浏览阅读418次。作者的思路我认为也是没问题,和我看法基本一致,生成式的sd不需要那么多定向的模型,提供强泛化能力的基础模型只需要几个就可以,而外挂的能力多…

【PyQt小知识 - 2】:QTextEdit内容的更新和获取、隐藏或显示滚动条、光标插入文本、文本自适应移动

文章目录 QTextEdit更新和获取内容隐藏或显示滚动条光标插入文本文本自适应移动 QTextEdit 更新和获取内容 更新:QTextEdit().setText(text) 或 QTextEdit().setPlainText(text) 获取:QTextEdit().toPlainText() setText()和setPlainText()的区别&…

力扣刷题篇之栈与队列3

系列文章目录 前言 本系列是个人力扣刷题汇总,本文是栈与队列。刷题顺序按照[力扣刷题攻略] Re:从零开始的力扣刷题生活 - 力扣(LeetCode) ​ 一、表达式求值 150. 逆波兰表达式求值 - 力扣(LeetCode) 方…

Harmony SDK API 版本 与 Harmony OS 版本对照表,及如何查看鸿蒙手机Harmony SDK Api 版本

Harmony SDK API 版本 与 Harmony OS 版本对照表 Harmony OSHarmony SDK APIHarmony 4.09Harmony 3.19Harmony 3.08Harmony 3.0 pre7Harmony 2.2.06Harmony 2.1.05Harmony 2.04 具体到真机上可能会有差异,如我的手机OS版本是2.0,按照上面表应该是4&…

[NSSRound#7 Team]ShadowFlag

文章目录 前置知识/proc目录python的反弹shellpin码计算 解题步骤 前置知识 /proc目录 Linux系统上的/proc目录是一种文件系统,用户可以通过这些文件查看有关系统硬件及当前正在运行进程的信息,甚至可以通过更改其中某些文件来改变内核的运行状态。/pro…

机器学习中的偏差漂移:挑战与缓解

一、介绍 机器学习算法已在各个行业得到广泛采用,在自动化流程、制定数据驱动决策和提高效率方面发挥着关键作用。然而,他们也面临着挑战,其中一个重要的问题是偏见。机器学习模型中的偏差可能会导致不公平和歧视性的结果,并对现实…

华为云优惠券介绍、领取入口及使用教程

华为云是华为的云服务品牌,致力于为用户提供一站式云计算基础设施服务。为了吸引用户,华为云经常推出各种优惠活动,其中就包括优惠券的发放,下面将为大家详细介绍华为云优惠券的作用、领取入口以及使用教程。 一、华为云优惠券介绍…

数据分析场景下,企业如何做好大模型选型和落地?

在数据驱动的数字化时代,有效的数据分析已成为企业成功的关键因素。而随着大模型带来能力突破,让AI与数据分析相互结合,使分析结果更好支撑业务,促进企业内部数据价值释放,成为了当下企业用户尤为关注的话题。 如何按照…

微信小程序项目——基本目录构成

基本构成 pages 用来存放所有小程序的页面;utils 用来存放工具性质的模块(比如:格式化时间的自定义模块);app.js 小程序项目的入口文件;app.json小程序项目的全局配置文件;app.wxss 小程序项目…

黑马程序员微服务第四天课程 分布式搜索引擎1

分布式搜索引擎01 – elasticsearch基础 0.学习目标 1.初识elasticsearch 1.1.了解ES 1.1.1.elasticsearch的作用 elasticsearch是一款非常强大的开源搜索引擎,具备非常多强大功能,可以帮助我们从海量数据中快速找到需要的内容 例如: …

Bobo Python 学习笔记

安装 Bobo 可以通过通常的方式安装,包括使用setup.py install 命令。当然,您可以使用Easy Install、Buildout或pip。 安装bobo Collecting boboDownloading bobo-2.4.0.tar.gz (17 kB) Collecting WebObDownloading WebOb-1.8.7-py2.py3-none-any.whl…

如何搭建属于自己的AI数字人直播SAAS系统?

随着人工智能技术的不断发展,AI数字人直播正成为互联网行业的新宠。面向未来的AI数字人直播系统无疑是直播领域的新风口。虽然拥有众多优势,但从0到1搭建这个系统可能存在着资源、技术和时间的挑战。那么,如何可以快速搭建属于自己的AI数字人…

infercnv

文章目录 brief安装使用体验输入文件制作运行试试吧结果部分others brief InferCNV is used to explore tumor single cell RNA-Seq data to identify evidence for somatic large-scale chromosomal copy number alterations, such as gains or deletions of entire chromoso…

老师的保命大法

数字化高度发达的今天,成绩查询系统已经成为学校教育中不可或缺的一部分。不同于传统的成绩公布方式,成绩查询系统更加高效、便捷,同时也充分保障了每位学生的隐私,今天就来揭秘这个教师保命大法! 1、代码查询法 对于…

视频集中存储/云存储平台EasyCVR级联下级平台的详细步骤

安防视频监控/视频集中存储/云存储/磁盘阵列EasyCVR平台可拓展性强、视频能力灵活、部署轻快,可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等,以及支持厂家私有协议与SDK接入,包括海康Ehome、海大宇等设备的SDK等。平台既具备传统安…

『亚马逊云科技产品测评』活动征文|阿里云服务器亚马逊服务器综合评测

授权声明:本篇文章授权活动官方亚马逊云科技文章转发、改写权,包括不限于在 Developer Centre, 知乎,自媒体平台,第三方开发者媒体等亚马逊云科技官方渠道 文章目录 引言一、亚马逊&阿里云发展历史介绍1.1 亚马逊发展历史1.2…

wps卸载和重新安装

卸载WPS sudo apt remove wps-office安装WPS 下载地址 安装命令 sudo dpkg -i wps-office_11.1.0.11708_amd64.debsunyuhuasunyuhua-HKF-WXX:~$ sudo dpkg -i wps-office_11.1.0.11708_amd64.deb 正在选中未选择的软件包 wps-office。 (正在读取数据库 ... 系统当前共安装…