Python日志记录库——loguru

 知识星球:知识星球 | 深度连接铁杆粉丝,运营高品质社群,知识变现的工具知识星球是创作者连接铁杆粉丝,实现知识变现的工具。任何从事创作或艺术的人,例如艺术家、工匠、教师、学术研究、科普等,只要能获得一千位铁杆粉丝,就足够生计无忧,自由创作。社群管理、内容沉淀、链接粉丝等就在知识星球。icon-default.png?t=O83Ahttps://articles.zsxq.com/id_5x1m9wdv3e20.html

Loguru 是一个简单而强大的 Python 日志记录库,它旨在提供一种更简洁、更现代的日志记录方式,相比于标准的 logging 模块,Loguru 允许开发者以最少的代码实现强大的日志功能。以下是 Loguru 的一些基本用法:

  1. 安装 Loguru: 你可以通过 pip 来安装 Loguru:

    pip install loguru
  2. 基本使用: 导入 Loguru 并使用默认配置记录日志:

    from loguru import logger
    logger.info("Hello, Loguru!")

  3. 日志输出到文件: 使用 logger.add() 方法将日志输出到文件,并可以设置日志轮转、保留策略等:

    logger.add("output.log", rotation="500 MB", level="INFO")
  4. 异常追踪: Loguru 可以捕获和记录异常信息,方便定位问题:

    from loguru import logger
    try:
        result = 1 / 0
    except Exception as e:
        logger.exception("An error occurred: {e}")

    image.png

  5. 消息格式化: Loguru 支持灵活的消息格式化,可以添加自定义信息、时间戳等:

    from loguru import logger
    logger.info("User {user} logged in at {time}", user="Alice", time="2023-01-01 12:00:00")
  6. 日志旋转: Loguru 支持日志旋转,可以基于文件大小或时间来触发日志旋转:

    from loguru import logger
    logger.add("rotating_log.log", rotation="100 MB", retention="10 days", level="INFO")
  7. 异步日志记录: Loguru 支持异步日志记录,提高性能:

    from loguru import logger
    logger.add("async_log.log", level="INFO", enqueue=True)
  8. 自定义处理器: Loguru 允许添加自定义处理器,满足个性化的日志记录需求:

    from loguru import logger
    def custom_handler(record):
        print(f"Custom Handler: {record['message']}")
    logger.add(custom_handler, level="INFO")
  9. 日志级别: Loguru 提供了丰富的日志级别,可以根据需要进行筛选,以便更精确地获取关键信息:

    from loguru import logger
    logger.add("important_logs.log", level="ERROR")
    logger.debug("This debug message will be ignored")
    logger.error("This error message will be recorded")
  10. 自定义输出格式: 通过 Loguru,可以根据项目的需求轻松定义自己的输出格式:

    python
    from loguru import logger
    logger.add("custom_format.log", format="<green>{time:YYYY-MM-DD HH:mm:ss}</green> | <level>{message}</level>")

Loguru 的设计理念是尽可能地简单易用,同时提供强大的功能,使其成为 Python 日志记录的优雅之道。更多关于 Loguru 的高级用法和特性,可以参考官方文档或相关教程。

举例.

写入文件
日志一般需要持久化,除了输出到命令行终端外,还需要写入文件。标准日志库可以通过配置文件配置logger,在代码中也可以实现,但过程比较繁琐。loguru相对而已就显得稍微简单一些,我们看下在代码中如何实现此功能。日志代码如下:

import sys

from loguru import logger

logger.configure(handlers=[
{
"sink": sys.stderr,
"format": "{time:YYYY-MM-DD HH:mm:ss.SSS} |<lvl>{level:8}</>| {name} : {module}:{line:4} | <cyan>mymodule</> | - <lvl>{message}</>",
"colorize": True
},
{
"sink": 'first.log',
"format": "{time:YYYY-MM-DD HH:mm:ss.SSS} |{level:8}| {name} : {module}:{line:4} | mymodule | - {message}",
"colorize": False
},
])

logger.debug('this is debug')
logger.info('this is info')
logger.warning('this is warning')
logger.error('this is error')
logger.critical('this is critical')



与3.1 唯一不同的地方,logger.configure新增了一个handler,写入到日志文件中去。用法很简单

3模块名参数化
上述只是通过logger.configure设置日志格式,但是模块名不是可变的,实际项目开发中,不同模块写日志,需要指定不同的模块名称。因此,模块名称需要参数化,这样实用性更强。样例代码如下:

import sys

from loguru import logger

logger.configure(handlers=[
{
"sink": sys.stderr,
"format": "{time:YYYY-MM-DD HH:mm:ss.SSS} |<lvl>{level:8}</>| {name} : {module}:{line:4} | <cyan>{extra[module_name]}</> | - <lvl>{message}</>",
"colorize": True
},
{
"sink": 'first.log',
"format": "{time:YYYY-MM-DD HH:mm:ss.SSS} |{level:8}| {name} : {module}:{line:4} | {extra[module_name]} | - {message}",
"colorize": False
},
])

log = logger.bind(module_name='my-loguru')
log.debug("this is hello, module is my-loguru")

log2 = logger.bind(module_name='my-loguru2')
log2.info("this is hello, module is my-loguru2")


logger.bind(module_name=‘my-loguru’)通过bind方法,实现module_name的参数化。bind返回一个日志对象,可以通过此对象进行日志输出,这样就可以实现不同模块的日志格式。
loguru中自定义模块名称的功能比标准日志库有点不同。通过bind方法,可以轻松实现标准日志logging的功能。而且,可以通过bind和logger.configure,轻松实现结构化日志。

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

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

相关文章

数学建模与优化算法:从基础理论到实际应用

数学建模和优化算法&#xff0c;它们不仅帮助我们理解和描述复杂系统的行为&#xff0c;还能找到系统性能最优化的解决方案。本文将从基础的数学理论出发&#xff0c;逐步深入到各种优化算法&#xff0c;并探讨它们在实际问题中的应用。 思维导图文件可获取&#xff1a;https:…

如何指定 Maven 的 JDK 版本?

maven 路径&#xff1a;/data/maven/ jdk 路径&#xff1a;/data/jdk_1.8 1、修改 mvn 可执行文件并指定 JDK 版本 vim /data/maven/bin/mvn # 在开头新增即可... # zhurs add JAVA_HOME PATH JAVA_HOME/data/jdk_1.8 ...保存退出即可&#xff01; 为什么在此处新增&#x…

C/C++(六)多态

本文将介绍C的另一个基于继承的重要且复杂的机制&#xff0c;多态。 一、多态的概念 多态&#xff0c;就是多种形态&#xff0c;通俗来说就是不同的对象去完成某个行为&#xff0c;会产生不同的状态。 多态严格意义上分为静态多态与动态多态&#xff0c;我们平常说的多态一般…

【博客节选】Unity角色异常抖动问题排查

本文截取自本人文章 &#xff1a;【Unity实战笔记】第二一 基于状态模式的角色控制——以UnityChan为例 发现出现角色抖动问题 尝试解决方法&#xff1a; 跳跃的loop time不要勾选&#xff1b; 相机aim添加垂直阻尼 还是不行&#xff0c;仔细查看是位移时震颤。 UnityCha…

两个mp3音频怎么合成一个?音频合成的多个好用方法教程

两个mp3音频怎么合成一个&#xff1f;在数字音频时代&#xff0c;随着各类音频内容的日益丰富&#xff0c;合并音频文件的需求也愈发突出。无论是为了制作连贯的音乐集&#xff0c;还是为了解决某些场合下音频播放的便利性&#xff0c;将两个或多个MP3音频合并在一起&#xff0…

【C++面试刷题】快排(quick_sort)和堆排(priority_queue)的细节问题

一、快排的快速选择算法两种思路&#xff08;面试会考&#xff09;O(N) 快排的三数取中思路&#xff1a; 重要的是将它三个数进行排序最左为最小&#xff0c;中间为次小&#xff0c;最右为最大的数。&#xff08;错误原因&#xff1a;我刚开始没有将这三个数进行排序&#xff…

Notepad++通过自定义语言实现日志按照不同级别高亮

借助Notepad的自定义语言可以实现日志的按照不同级别的高亮&#xff1b; 参考&#xff1a; https://blog.csdn.net/commshare/article/details/131208656 在此基础上做了一点修改效果如下&#xff1a; xml文件&#xff1a; <NotepadPlus><UserLang name"Ansibl…

洞察数据之美:用可视化探索销售与温度的关系

目录 数据可视化1.气温数据可视化图片展示将最高和最低气温合并绘制折线图&#xff1a;将最高和最低气温合并绘制散点图&#xff1a; 2.销售数据可视化几种常见的销售数据可视化方法及其适用场景&#xff1a;图片展示通过热力图和堆叠柱状图的直观展示&#xff0c;可以得出以下…

CAS简介

#1024程序员节&#xff5c;征文# CAS是什么&#xff1f; CAS&#xff08;Compare And Swap&#xff09;&#xff0c;即比较与交换&#xff0c;是一种乐观锁的实现方式&#xff0c;用于在不使用锁的情况下实现多线程之间的变量同步。 CAS操作包含三个操作数&#xff1a;内存位…

【Nginx】win10 安装Nginx

1.下载 nginx: download 2.安装 解压即可 3.启动 可以自己修改端口&#xff0c;conf/nginx.conf 确保端口不被占用cmd启动&#xff08;不要双击nginx.exe启动&#xff0c;至于原因我粘贴一下&#xff09; start nginx.exe 可以看到是后台运行&#xff0c;还不错 访问&…

易基因:Nat Commun:ATAC-seq等揭示恒河猴大脑高分辨率解剖区域的转录组和开放染色质图谱

大家好&#xff0c;这里是专注表观组学十余年&#xff0c;领跑多组学科研服务的易基因。 恒河猴是神经科学研究中常用的模型动物&#xff0c;其大脑结构和功能与人类大脑相似。大脑中复杂的遗传网络是灵长类动物行为、认知和情感的基础&#xff0c;一直是神经科学的核心。大脑…

全面了解MindSporeLite轻量化推理工具(概念版)

一、参考资料 技术干货&#xff5c;极速、极智、极简的昇思MindSpore Lite&#xff1a;助力华为Watch更加智能 二、相关概念 MCU MCU的全称是Microcontroller Unit&#xff0c;中文可以称为微控制器或者单片机。MCU既可用于汽车电子、工业控制等领域&#xff0c;也可应用于…

Docker入门之构建

Docker构建概述 Docker Build 实现了客户端-服务器架构&#xff0c;其中&#xff1a; 客户端&#xff1a;Buildx 是用于运行和管理构建的客户端和用户界面。服务器&#xff1a;BuildKit 是处理构建执行的服务器或构建器。 当您调用构建时&#xff0c;Buildx 客户端会向 Bui…

【纯血鸿蒙】安装hdc工具

这里我先写Mac版的,Windows的在下面 首先要知道你的SDK安装在哪里了,不知道的话,可以打开DevEco Studio,打开设置页面里的HarmonyOS SDK,这个我们之前配置环境变量的时候用过。 其实主要是用到这里toolchains下的hdc命令。 所以我们需要配置环境变量。 1、打开Mac下的…

RabbitMQ是一个开源的消息代理和队列服务器

RabbitMQ是一个开源的消息代理和队列服务器&#xff0c;它基于AMQP&#xff08;Advanced Message Queuing Protocol&#xff0c;高级消息队列协议&#xff09;协议实现&#xff0c;同时也支持其他消息协议如STOMP、MQTT等。作为一个可靠的消息传递服务&#xff0c;RabbitMQ在分…

Nginx+Tomcat 动静分离

1. NginxTomcat 环境 Nginx 处理静态资源的优势同样可以应用在 Tomcat 环境中 。从实现方法上来说&#xff0c;NginxTomcat 环境的搭建思路与前面完成的 NginxApache 环境是完全相同的&#xff0c;只需要将 Nginx 与 Tomcat 的站点文档目录配置到同一目录下&#xff0c;利用 N…

Python 打包成 EXE 的方法详解

#1024程序员节&#xff5c;征文# 日常开发中&#xff0c;python由于其便捷性成为了很多人的首选语言&#xff0c;但是python的环境配置也是有点麻烦的&#xff0c;那么我们如何让其变得更加友好呢&#xff1f;没错&#xff0c;就是打包成exe可执行文件。 一、PyInstaller 简介…

在使用 RabbitMQ 作为消息代理时,多个 Celery 实例(或应用)可以共享同一个 RabbitMQ 实例

在使用 RabbitMQ 作为消息代理时&#xff0c;多个 Celery 实例&#xff08;或应用&#xff09;可以共享同一个 RabbitMQ 实例。这样做可以简化基础设施管理&#xff0c;同时允许不同的 Celery 应用之间进行消息传递和协作。下面是如何配置多个 Celery 实例以使用同一个 RabbitM…

鸿蒙到底是不是纯血?到底能不能走向世界?

关注卢松松&#xff0c;会经常给你分享一些我的经验和观点。 2016年5月鸿蒙系统开始立项。 2018年美国开始经济战争&#xff0c;其中一项就是制裁华为&#xff0c;不让华为用安卓。 2019年8月9日华为正式发布鸿蒙系统。问题就出在这里&#xff0c;大家可以仔细看。 安卓一…

Java之bean操作【复制】

#1024程序员节 | 征文# 文章目录 一、深拷贝二、不为空拷贝三、List转换 1024 祝各位大佬 节日快乐&#xff01; 在Java项目开发中&#xff0c;对Java对象操作如bean复制等&#xff0c;可使用 一、深拷贝 private static final Map<String, BeanCopier> BEAN_COPIER_M…