Python 中日志记录新技能

python Logging日志记录模块详解 写在篇前   logging是Python的一个标准库,其中定义的函数和类为应用程序和库的开发实现了一个灵活的事件日志系统。Python logging 的配置由四个部分组成:Logger、Handlers、Filter、Formatter。本篇博客将依次介绍这四个主要部分以及logging的基本应用。   在开始之前,我们有必要先了解一下,什么时候我们才有必要使用logging模块,什么时候抛出... 阅读详情

一般情况下我们记录日志经常用到的是 logging 模块,在使用前我们需要配置模板,设置 Handler、Formatter 来预处理,例如日志输出位置、输出格式、日志分块和备份等。在不同项目使用日志时,前期需要进行 logger 的配置工作,相比较今天得到 的新技能个人感觉配置较繁琐。

新技能就是"Delgan/loguru",Loguru是一个旨在在Python中带来愉快日志记录的库。

本篇我们从四方面介绍 Loguru:

1、与 logging 区别,为什么 loguru"香"

2、安装

3、快速使用

4、高阶用法简介

一、与 logging 区别,为什么 loguru"香"

​伐木洛古鲁
相同提供简洁、灵活地事件记录功能
不同需要显式实例化logger,并使用Handler,Formatte,Filter减少配置步骤,add函数统治所有

二、安装

老规矩,第一步安装库,在 python3 环境下,直接 pip3 安装即可:

pip3 install loguru

三、快速使用

安装成功之后,我们就可以开始啦

<span style="color:#444444"><span style="background-color:#f6f6f6"><span style="color:#333333"><strong>from</strong></span> loguru import logger

logger.<span style="color:#78a960">debug</span>(<span style="color:#880000">"This is Debug"</span>)</span></span>

不需要繁琐的配置,开箱即"食",so easy

loguru 中主要对象就是 logger,有且只有 loguru,为何不需要配置就可使用呢,那是因为这些配置已经前置啦,输出格式化,文本颜色等,控制台输出如下:

输出内容包括时间、级别、模块名、行号以及日志信息,另外其输出还是彩色的,看起来会更加友(xuan)好(ku)

那如何 DIY 个性化定制专属日志呢,我们看看下一章吧

四、高阶用法简介

我们主要看看 loguru.logger 的"万能"add()

<span style="color:#444444"><span style="background-color:#f6f6f6"><span style="color:#333333"><strong>def</strong></span> <span style="color:#880000"><strong>add</strong></span>(
        self,
        sink,
        *,
        level=_defaults.LOGURU_LEVEL,
        format=_defaults.LOGURU_FORMAT,
        filter=_defaults.LOGURU_FILTER,
        colorize=_defaults.LOGURU_COLORIZE,
        serialize=_defaults.LOGURU_SERIALIZE,
        backtrace=_defaults.LOGURU_BACKTRACE,
        diagnose=_defaults.LOGURU_DIAGNOSE,
        enqueue=_defaults.LOGURU_ENQUEUE,
        catch=_defaults.LOGURU_CATCH,
        **kwargs
    ):
  <span style="color:#333333"><strong>pass</strong></span></span></span>

从源码中可以看出,add 参数很多,如 level、format、filter、color 等等,我们重点看看 sink 参数

接收器 :|类似文件的对象|_、|str|、|路径|、|可调用|_、|coroutine 函数|_ 或 |处理程序|

负责接收格式化的日志记录消息并将其传播到

适当的终结点。

(1)支持文件对象

(2)可以直接传入一个 字符串或者 对象strpathlib.Path

(3)可以是一个 logging 模块中的 Handler

(4)可以是一个类或方法

下面我们就试试吧

(一)保存输出日志到文件

<span style="color:#444444"><span style="background-color:#f6f6f6"><span style="color:#333333"><strong>from</strong></span> loguru import logger

logger.add(<span style="color:#880000">"test_loguru_{time}.log"</span>)  <span style="color:#888888"># 在add定义输出的文件名</span>

logger.<span style="color:#78a960">debug</span>(<span style="color:#880000">"This is Debug"</span>)</span></span>

控制台输出

文件输出到当前工程目录下

文件内容

(二)支持日志大小分割、日志保留时间定义

按日志大小、时间(小时、周)创建

旋转 : |str|, |int|, |time|, |timedelta|或|可调用|_,可选

指示何时应关闭当前日志文件和应关闭新文件的条件

开始。

配置日志保留最长时间

保留 : |str|, |int|, |timedelta|或|可调用|_,可选

一个指令,用于筛选在旋转或结束时应删除的旧文件

程序。

<span style="color:#444444"><span style="background-color:#f6f6f6"><span style="color:#333333"><strong>from</strong></span> loguru import logger

logger.<span style="color:#333333"><strong>add</strong></span>(<span style="color:#880000">"test_loguru_{time}.log"</span>, rotation=<span style="color:#880000">"1MB"</span>)   <span style="color:#1f7199"># 每个文件大小1MB.超过创建新文件</span>

logger.<span style="color:#333333"><strong>add</strong></span>(<span style="color:#880000">"test_loguru_{time}.log"</span>, rotation=<span style="color:#880000">"12:00 "</span>)   <span style="color:#1f7199"># 每天12点创建新文件</span>

logger.<span style="color:#333333"><strong>add</strong></span>(<span style="color:#880000">"test_loguru_{time}.log"</span>, rotation=<span style="color:#880000">"1 week"</span>)   <span style="color:#1f7199"># 每周创建新文件</span></span></span>

(三)支持日志时间自定义

<span style="color:#444444"><span style="background-color:#f6f6f6"><span style="color:#333333"><strong>from</strong></span> loguru import logger

logger.add(<span style="color:#880000">"test_loguru_{time}.log"</span>, format=<span style="color:#880000">"{time:YYYY-MM-DD A HH:mm:ss.SSSS} | {level} | {name} | {message}"</span>,level=<span style="color:#880000">"DEBUG"</span>, rotation=<span style="color:#880000">"500MB"</span>, retention=<span style="color:#880000">"1 days"</span>)

logger.<span style="color:#78a960">info</span>(<span style="color:#880000">"This is INFO"</span>)</span></span>

(四)支持代码异常追踪

回溯跟踪(bool,可选) – 格式化的异常跟踪是否应向上扩展,超出捕获点,以显示生成错误的完整堆栈跟踪。

诊断(bool,可选)– 异常跟踪是否应显示变量值以简化调试。在生产环境中,这应设置为 False,以避免泄露敏感数据。

1、在 add 参数中设置

<span style="color:#444444"><span style="background-color:#f6f6f6"><span style="color:#333333"><strong>from</strong></span> loguru <span style="color:#333333"><strong>import</strong></span> logger

logger.add(<span style="color:#880000">"test_loguru_{time}.log"</span>, format=<span style="color:#880000">"{time} | {level} | {name} | {message}"</span>, level=<span style="color:#880000">"DEBUG"</span>,
           rotation=<span style="color:#880000">"1 KB"</span>, retention=<span style="color:#880000">"10 seconds"</span>, encoding=<span style="color:#880000">"utf-8"</span>, backtrace=<span style="color:#333333"><strong>True</strong></span>, diagnose=<span style="color:#333333"><strong>True</strong></span>)


<span style="color:#333333"><strong>def</strong></span> <span style="color:#880000"><strong>test</strong></span>(num_list):
    <span style="color:#333333"><strong>try</strong></span>:
        <span style="color:#333333"><strong>for</strong></span> num <span style="color:#333333"><strong>in</strong></span> num_list:
            logger.info(f<span style="color:#880000">"This Number is "</span> + num)
    <span style="color:#333333"><strong>except</strong></span> Exception <span style="color:#333333"><strong>as</strong></span> e:
        logger.exception(e)


<span style="color:#333333"><strong>if</strong></span> __name__ == <span style="color:#880000">"__main__"</span>:
    l = [<span style="color:#880000">1</span>, <span style="color:#880000">2</span>, <span style="color:#880000">3</span>]
    test(num_list=l)</span></span>

控制台输出

日志文件内容

2、使用装饰器直接 Traceback 记录

<span style="color:#444444"><span style="background-color:#f6f6f6"><span style="color:#333333"><strong>from</strong></span> loguru <span style="color:#333333"><strong>import</strong></span> logger

logger.add(<span style="color:#880000">"test_loguru_{time}.log"</span>, format=<span style="color:#880000">"{time} | {level} | {name} | {message}"</span>, level=<span style="color:#880000">"DEBUG"</span>,
           rotation=<span style="color:#880000">"1 KB"</span>, retention=<span style="color:#880000">"10 seconds"</span>, encoding=<span style="color:#880000">"utf-8"</span>)


<span style="color:#1f7199">@logger.catch</span>
<span style="color:#333333"><strong>def</strong></span> <span style="color:#880000"><strong>test</strong></span>(num_list):
    <span style="color:#333333"><strong>for</strong></span> num <span style="color:#333333"><strong>in</strong></span> num_list:
        logger.info(f<span style="color:#880000">"This Number is "</span> + num)


<span style="color:#333333"><strong>if</strong></span> __name__ == <span style="color:#880000">"__main__"</span>:
    l = [<span style="color:#880000">1</span>, <span style="color:#880000">2</span>, <span style="color:#880000">3</span>]
    test(num_list=l)</span></span>

控制台输出

文件输出

至此,我们可以看出 Loguru 是很强大的,应用简洁,调试追踪直观,当然它还有很多强大功能,大家可以前往官网学习哈

参考资料:

github: https:// github.com/Delgan/logur u

loguru 帮助手册: https:// loguru.readthedocs.io/e n/stable/index.html

【Python实用教学】Python 中如何高效完美地处理日志记录? 优雅地处理日志对于应用程序的健康运行至关重要。logging模块为开发者提供了多种方法来记录和管理日志信息。从基础的配置到高级的处理器和过滤器,在本文中全面探讨了 Python 中如何优雅地处理日志。 阅读详情

相关推荐

Python Django日志记录解析

在 Django 中,日志记录是一项强大的工具,允许开发者记录应用程序运行过程中发生的信息,以便更轻松地调试、监控和维护系统。Django 的日志系统基于 Python 的标准库模块 logging 提供的功能,并支持高度自定义的日志配置。

1088

Loguru基本、进阶使用方法小结。

loguru基本、进阶使用方法,打印显卡型号

baidu_41879652的博客 7574

Python中的日志记录与调试技巧

模块记录程序的正常运行信息外,我们还可以利用日志进行调试。通过在程序中插入日志语句,我们可以方便地查看关键代码的执行情况、变量的值以及函数调用等信息。:ipdb是一个基于pdb和IPython的调试器,结合了pdb的调试功能和IPython的交互式特性。通过在代码中设置断点,我们可以逐步执行程序,查看变量的值,以及调用栈等信息。:pdbpp是Python内置调试器pdb的一个增强版本,提供了更多的功能和更好的用户体验。除了Python内置的调试工具外,还有一些第三方的库和工具可以帮助我们更高效地进行调试。

weixin_71166183的博客 1398

k8s pod container python log print延迟输出问题

问题背景:使用k8s-job-pod-container时 python的print总是在程序退出时打印,导致无法实时获取容器的日志。 解决方案: 这是因为stdout和stderr流在Python中进行了缓冲。 您可以将环境变量设置为PYTHONUNBUFFERED=1或True 我启动容器是 kubectl create -f xxx.kml 的方式启动job 所以我只需要修改kml文件即可 在容器的env参数中 添加PYTHONUNBUFFERED=“1” apiVersio.

xiaofeixia666888的博客 2542

Python 领域中 pytest 的日志记录配置

在 Python 测试框架中,pytest 是一个功能强大且广泛使用的工具。日志记录在测试过程中起着至关重要的作用,它可以帮助开发人员和测试人员快速定位问题、了解测试执行的详细情况。本文的目的是全面介绍 pytest 的日志记录配置,包括如何设置日志级别、日志格式、日志输出位置等。范围涵盖了从基础的日志配置到高级的自定义配置,适用于不同经验水平的 Python 开发者和测试人员。本文将按照以下结构进行组织:首先介绍核心概念与联系,让读者对 pytest 日志记录有一个基本的认识;

AI Python 编程之道的博客 1217

Python日志记录库之logbook使用详解

在软件开发和运维中,日志记录是一项至关重要的任务。Python 的 Logbook 库是一个强大而灵活的日志记录工具,提供了丰富的功能和易用的接口。本文将深入探讨 Logbook 库的特性、用法,并通过丰富的示例代码展示其在实际项目中的应用。

Rocky006的博客 1000

够用的 Python 写日志的知识——标准日志模块logging简介

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34268610的博客 132

深入理解Python中的日志记录(Logging)

在软件开发过程中,了解应用程序的运行状态对于调试、监控和解决问题至关重要。日志记录是捕获这些信息的关键工具之一。Python提供了一个强大的日志记录系统,即logging模块,它为应用程序提供了一套标准的日志记录接口。一、Python Logging 模块概述logging模块是Python的标准库的一部分,它使得追踪事件、诊断问题和调试应用程序变得容易。它提供了不同的日志级别,如DEBUG、INFO、WARNING、ERROR和CRITICAL,这可以帮助开发者根据重要性区分日志消息。二、相关组件。

xmp65535的博客 7177

python + logging 实现日志输出及保存到文件

文章目录1 开始使用 logging1.1 第一个程序1.2 日志级别1.3 输出格式2 输出日志到文件2.1 使用 basicConfig 配置文件路径2.2 logging 模块化设计2.3 自动分割日志文件 最近因为一个小需求,需要保存日志到文件中。因为平时调试都只是用print,当不需要的时候又得把print删掉,这样很不方便,而且这样也只能把报错信息输出到控制台。于是上网查了一下,pyt...

Runner1st的博客 9万+

Python实现监控程序执行时间并将其写入日志的方法

本文实例讲述了Python实现监控程序执行时间并将其写入日志的方法。分享给大家供大家参考。具体实现方法如下: # /usr/bin/python # -*- coding:utf-8 -*- from time import time def logged(when): def log(f,*args,**kargs): print ''' called: functions:%s args: %r kargs: %r ''' % (f,args,kargs) def pre_logged

什么是PON(无源光纤网络)、PON的发展及演进

全球知名媒体Omdia在光纤和铜缆接入设备预测报告中对2022年2月的预测显示,PON设备端口收入预计在2020年至2027年期间以12.3%的年复合增长率增长,到2027年将达到163亿美元,远高于2020年的82亿美元。 此前,Omdia有份报告称,在3月份举行的美国OFC展会中,众多 CSP 正在顺利部署 XGS PON(10G 对称),其他 CSP 专注于基于 GPON 的低速 FTTH 服务。另外关于25G PON 和 50G PON 之间的争论仍在继续,而Omdia 认为 25G PON 和 5

4930

python之ATM

python之ATM   每次做一点就发出来,大神不要嫌重复   2016/11/4   今天来搞ATM,反正逃不了的,说来惭愧,这个作业是我10/4号20天前拿到的,当时是万脸蒙比的,今天又做了一点,现在算是百脸蒙比吧。 一、需求:模拟实现一个ATM + 购物商城程序   额度 15000或自定义   实现购物商城,买东西加入 购物车,调用信用卡接口结账 其实是两套单独程序   可以提现,手续费5% 提现不能超过总余额一半   每月22号出账单,每月10号为还款日,...

qq_46175823的博客 445

视觉SLAM十四讲习题答案

阅读《视觉SLAM十四讲》中遇到的问题及习题资源整理,或为原创,或来自网络,如有问题请与我联系,会在第一时间加以修正。 后来自己写完看到另一位写的博客,相形见绌,大家可以互相结合的看。 第一讲 1.线性方程的解:转载自宋洋鹏(youngpan1101),了解线性代数可关注B站3Blue1Brown,以及线性代数,知乎上有其精细笔记。 2.高斯分布参考这位博主Johnny-Cuii的文章,具体...

INFINITE POSSIBILITIES 1万+

python日志记录_Python日志记录

python记录日志To start, logging is a way of tracking events in a program when it runs and is in execution. Python logging module defines functions and classes that provide a flexible event logging system ...

从零开始的教程世界 3644

GD32F103程序烧录全攻略:从SWD到串口的实战指南

本文提供了GD32F103微控制器程序烧录的全面实战指南,详细介绍了SWD、JTAG和串口(ISP)三种主流下载方式。文章重点解析了在Keil MDK中使用ST-Link进行SWD下载的完整步骤,包括硬件连接、软件配置和Flash算法设置,并针对烧录过程中的常见问题提供了实用的排坑解决方案,帮助开发者高效完成程序部署。

weixin_29191669的博客 437

给排水工程师的SWMM初体验:从软件界面到第一个简单模型的保姆级上手教程

本文为给排水工程师提供SWMM软件的保姆级上手教程,从界面解析到创建第一个简单模型,详细介绍了SWMM的核心功能和操作步骤。通过30分钟的实践指导,帮助新手快速掌握雨水管网建模的基本技能,提升工作效率。

weixin_28736355的博客 323

Python 日志记录:6大日志记录库的比较

日志记录框架是一种工具,可帮助您标准化应用程序中的日志记录过程。虽然某些编程语言提供内置日志记录模块作为其标准库的一部分,但大多数日志记录框架都是第三方库,例如logging(Python)、Log4j(Java)、Zerolog(Go) 或Winston(Node.js)。有时,组织会选择开发自定义日志记录解决方案,但这通常仅限于具有高度专业化需求的大型公司。虽然 Python 在其标准库中提供了强大且功能丰富的日志记录解决方案,但第三方日志记录生态系统也提供了一系列引人注目的替代方案。

Null的博客 2万+

Coze智能体开发:搭建一个解析 PDF 文件的工作流

大模型本身并不具备文件读取和解析的能力,无法直接处理文件字节流。对于支持工具调用(Function calling)的模型,扣子提供插件功能来帮助大模型调用外部工具 API,拓展大模型的能力边界。扣子插件商店提供海量官方插件和第三方插件,例如链接读取插件可以将链接对应的文件内容解析为纯文本传递给大模型。

王国平的博客 2813

python记录日志_python日志记录教程

python记录日志Logging is a very important functionality for a programmer. For both debugging and displaying run-time information, logging is equally useful. In this article, I will present why and how you...

weixin_26741235的博客 1340

基于PyQt5和OpenCV的传统图像分割应用UI程序

主要功能包括:加载和显示图像应用多种图像分割算法调整算法参数保存处理结果。

Henry的博客 473

基于ArduPilot的旋翼式无人机飞行器开发系列(二,学习路线)

一,热爱 作为一名耿直的技术男,在这里我只想说一句,热爱是可持续学习的第一要素,也只有热爱才能让你坚持到最后。 至于最后能得到什么,只有你自己知道。常说书中自有颜如玉,书中自有黄金屋。如果你是为了颜如玉,我相信大多数颜如玉做不了你的红颜知己。如果是为了黄金屋,当你持续投入时间和金钱却看不到回报的时候,相信退堂鼓早已隆隆作响。 我给自己的信条就是为当下努力工作,为将来持续学习。当前飞控行业并没有爆发,如果想赚块钱,去互联网汽车,去VR/AR吧,去元宇宙吧。 那么我热爱...

从0到1,突破自己 1670

Loguru - Python 日志记录

此外,这个库旨在通过添加一堆有用的功能来解决标准记录器的警告,从而减少Python日志记录的痛苦。尽管日志对性能的影响在大多数情况下可以忽略不计,但零成本记录器将允许在任何地方使用它而无需担心。记录代码中出现的异常对于跟踪错误很重要,但是如果你不知道为什么它失败了,那就没用了。如果您需要旋转记录器,如果您想删除旧日志,或者如果您希望在关闭时压缩文件,它也。在即将发布的版本中,Loguru的关键功能将在C中实现以获得最大速度。我做了,但日志记录是每个应用程序的基础,并简化了调试过程。

AI工程化、开源分享、文档翻译、代码笔记 1718

【RT-DETR实战】RT-DETR实战手记(200):端侧实时目标检测,下一步往哪儿走?

昨天深夜调一个模型部署,在树莓派4B上跑RT-DETR-nano,帧率死活卡在8FPS上不去。量化也做了,算子也优化了,内存对齐也检查了,可就是离实时检测的底线还差一截。盯着终端里跳动的数字,突然意识到——我们可能正在接近当前技术路径的瓶颈。端侧实时目标检测的下一个突破口,恐怕不在现有框架的修修补补里。

企鹅码农的专属播客,分享10多年的实战案例和经验解读,包含YOLO、RT-DETR、AI等各个工作领域。 186

python模块 — 日志记录模块logging

logging是Python内置的日志记录模块,用于在程序中实现灵活的日志功能。使用logging模块可以记录错误、异常、警告和其他关键信息,以便于诊断和调试应用程序。logging模块提供了以下主要组件:1. Logger(日志器):用于创建或获取一个用于发送日志记录消息的Logger对象。我们可以在不同的模块中定义和使用Logger对象来记录日志。2. Handler(处理器):用于指定将如何处理和输出日志消息。Handler可以将日志消息写入文件、控制台、网络等不同的目标。

个人博客 4112

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

31天Python入门——第15天:日志记录

模块用于处理和输出日志消息的组件.我们可以为日志记录器添加一个或多个处理程序, 以决定日志消息的输出位置.可以设置日志记录器的级别, 以决定哪些级别的日志消息会被记录.默认情况下, 日志记录器的级别是。通过适当的日志记录, 我们可以追踪应用程序的行为、排查问题和监控系统状态.模块, 它是一个强大而灵活的日志记录工具.要使用。要将日志写入到文件只需要将创建日志处理程序的。模块, 使得日志记录变得简单而强大,模块, 先导入, 然后创建日志记录器。将处理程序添加到日志记录器.级别的消息会被记录.

安然无虞的博客 1926

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

python日志记录loguru以及如何记录到两个日志文件中

在部署一些定时运行或者长期运行的任务时,为了留存一些导致程序出现异常或错误的信息,通常会才用日志的方式来进行记录这些信息。 在 Python 中用到日志记录,那就不可避免地会用到内置的 logging标准库 。虽然logging 库采用的是模块化设计,你可以设置不同的 handler 来进行组合,但是在配置上通常较为繁琐;而且如果不是特别处理,在一些多线程或多进程的场景下使用 logging还会导致日志记录会出现错乱或是丢失的情况。 但有这么一个库,它不仅能够减少繁琐的配置过程还能实现和logging类似的

qq_37289115的博客 9956

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

上一篇: 用 Python 去除 PDF 水印,你学会吗?
下一篇: Python网络请求-aiohttp
Python_xiaowu
博客等级 码龄5年 3096粉丝 178原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值