网站优化

网站优化

Products

当前位置:首页 > 网站优化 >

学习Python日志使用,能快速掌握高效调试和优化代码的秘诀吗?

GG网络技术分享 2025-11-25 02:35 1


嘿嘿, 巨大家优良,今天我要跟巨大家聊聊Python里面的日志用,这可是个超级优良用的技巧哦!你晓得吗,用得优良,Neng像侦探一样,飞迅速找到代码里的细小暗地,还Neng让我们的程序变得geng有力巨大呢!

啥是日志呢?

日志就像是程序的日记本, 它会记录程序运行过程中的点点滴滴,比如我们写了个程序,它就记下啥时候开头运行,啥时候收尾,还记下它遇到了啥问题,或者Zuo了啥关键的事情。

日志等级,你懂吗?

这就是日志等级的作用了我们通过配置文件指定我们需要的日志等级就Neng了。就像是给日志贴个标签,告诉它关键不关键。

说明:并且各编程语言dou和相应的框架。

日志模板 log.py:

一个轻巧松的自写日志模板举例:

add 函数的 rotation 参数, Neng实现按照固定时候创建新鲜的日志文件,比如设置每天 点新鲜创建一个 log 文件:

设置日志文件Zui许多保留 个:

如图 logging 一样, loguru 也有定义日志等级。不同的日志等级,输出效果也不一样。

我是怎么学会用日志的?

写本文的目的是我在写 python 项目的时候需要记录日志, 我记不得怎么处理了每次dou需要去网上查一遍, 优良记性不如烂笔头 , 这里把查阅的内容记录下来方便以后查找。

在一个完整的项目中, 巨大许多数人dou会引入专门的日志记录库,而 Python 自带的标准库 logging 就是专门为日志记录而生的,logging 模块定义的函数和类为应用程序和库的开发实现了一个灵活的事件日志系统。由标准库模块给日志记录 API 的关键优良处是全部 Python 模块douNeng用这玩意儿日志记录功Neng。所以你的应用日志Neng将你自己的日志信息与来自第三方模块的信息整合起来。

通过给 remove 方法传递 add 方法返回的对象, Neng删除 add 方法添加的 sink ,这里的 remove 并不是删除 test2.log 文件,而是打住向该文件输出日志,需要需要接着来记录日志则需要沉新鲜 add 日志文件。

日志,你真实的会用吗?

基本语法:

先说说我们要树立一个观点, 那就是“不是为了记录日志而记录日志,日志也不是随意记的”。要实现Neng够只通过日志文件还原整个程序施行的过程, 达到Neng透明地kan到程序里施行情况,个个线程个个过程到底施行后来啊的目的。日志就像飞机的黑匣子一样,应当Neng够复原异常的整个现场乃至细节。

在项目中,日志这玩意儿功Neng非常关键,我们要沉视起来。

而 test.log 日志文件里面只有一条 debug 信息,原因就在于我们在第二条 debug 语句之前用了 remove 语句。

设置超出 MB 新鲜创建一个 log 文件:

python 项目中记录日志, Neng用 logging 模块,logging 模块定义的函数和类为应用程序和库的开发实现了一个灵活的事件日志系统。logging 模块是Python的一个标准库模块,由标准库模块给日志记录 API 的关键优良处是全部 Python 模块douNeng用这玩意儿日志记录功Neng。所以你的应用日志Neng将你自己的日志信息与来自第三方模块的信息整合起来。

日志,你的作用有许多巨大?

日志的作用非常关键, 日志Neng记录用户的操作、程序的异常,还Neng为数据琢磨给依据,日志的存在意义就是为了Neng够在程序在运行过程中记录错误,方便维护和调试,Neng够飞迅速定位出错的地方,少许些维护本钱。个个程序员dou得晓得,不是为了记录日志而记录日志,日志也不是随意记的。要实现Neng够只通过日志文件还原整个程序施行的过程, 达到Neng透明地kan到程序里施行情况,个个线程、个个过程到底施行到哪的目的。日志就像飞机的黑匣子一样,应当Neng够复原异常的整个现场乃至细节!

日志输出:

类似 logging 中的 logger.addHandler , loguru统一用 add 函数来管理格式、文件输出、过滤等操作,它给了许许多参数来实现 logger.addHandler 中的配置geng加轻巧松方便。

但用方式相对比比kan麻烦, 想要geng优良的用需要如 log4net 一样单独配置,这在 python 中感觉不是hen优雅。

日志的作用:

我们Neng在不少许细小项目里面kan到作者自己写了一个日志模板, 通常利用 print 或者 sys.stdout 稍微封装一下即可实现轻巧松的日志输出,这里的 sys.stdout 是 Python 中的标准输出流, print 函数是对 sys.stdout 的高大级封装,当我们在 Python 中打印对象调用 print 时候,说实在的是调用了 sys.stdout.write , print 将内容打印到了控制台,然后追加了一个换行符 & &。

日志,你的奥秘在这里!

从事与柔软件相关干活的人,得dou听过“日志”一词。

在 Loguru 里Neng直接用它给的装饰器就Neng直接进行异常捕获, 而且得到的日志是无比详细的:

add 函数的 compression 参数,Neng配置日志文件的压缩格式,这样Nenggeng加节省存储地方,比如设置用 zip 文件格式保存:

在柔软件开发阶段或部署开发周围时为了尽兴许详细的查kan应用程序的运行状态来保证上线后的稳稳当当性,我们兴许需要把该应用程序全部的运行日志全部记录下来进行琢磨,这是非常耗费机器性Neng的。

用装饰器 @logger.catch Neng和 logging 一样用 logger.exception 函数来记录异常信息。

也Neng是一个 datetime.timedelta 对象, 比如设置日志文件Zui许多保留 个细小时:

基本参数释义:

Ru果想自定义日志级别,自定义日志格式,保存日志到文件该怎么办?与 logging 模块不同, 不需要 Handler,不需要 Formatter,只需要一个 add 函数就Neng了比方说我们想把日志储存到文件:

调用日志模块:

它在控制台中是这样的:

其格式支持: gz 、 bz2 、 xz 、 lzma 、 tar 、 tar.gz 、 tar.bz2 、 tar.xz

此时控制台会输出两条 debug 信息:

设置每隔一个周新鲜创建一个 log 文件:

控制台输出日志如下:

当应用程序正式发布或在生产周围部署应用程序时我们通常只需要记录应用程序的异常信息、错误信息等,这样既Neng减细小服务器的I/O压力,也Neng避免我们在排查故障时被淹没在日志的海洋里。

logging模块将日志系统从高大向矮小依次定义了四个类, 分别是logger、handler、filter和formatter。其中由日志器生成的实例将接管原本日志记录函数logging.log的功Neng。

用 exception 方法输出的异常信息包含堆栈信息和当前变量的值,方便问题定位。

对于 logging 模块, 即便是轻巧松的用,也需要自己定义格式,这里介绍一个geng加优雅、高大效、简洁的第三方模块:loguru,官方的介绍是:Loguru is a library which aims to bring enjoyable logging in Python. Loguru 旨在为 Python 带来愉迅速的日志记录。这里引用官方的一个 GIF 来飞迅速演示其功Neng:

支持控制台输出添加颜色, 除了基础色, loguru 甚至允许16进制、RGB格式的颜色值和加粗、下划线等样式。

开发应用程序时或部署开发周围时 Neng用DEBUG或INFO级别的日志获取尽兴许详细的日志信息,Neng方便进行开发或部署调试。 应用上线或部署生产周围时 应用用WARNING或ERROR或CRITICAL级别的日志,来少许些机器的I/O压力和搞优良获取错误日志信息的效率。 日志级别的指定通常dou是在应用程序的配置文件中进行指定的。 不同的应用程序所定义的日志等级会有所差别,根据实际需求来决定。

Nengkan到不需要手动设置, Loguru 会提前配置一些基础信息,自动输出时候、日志级别、模块名、行号等信息,而且根据等级的不同,还自动设置了不同的颜色,方便kankan,真实正Zuo到了开箱即用!

当且仅当 sink 是协程函数时 以下参数适用:

输出日志:

这么许多参数Neng见识到 add 函数的有力巨大之处,仅仅一个函数就Neng实现 logging 模块的诸许多功Neng,接下来介绍几个比比kan常用的方法。

用 rotation 、 retention 、 compression 进行日志窗口、geng新鲜、压缩管理。

在 __init__.py 文件中Zuo如下配置:

相比 Logging, Loguru 无论是在配置方面、日志输出样式还是异常追踪,dou远优于 Logging,用 Loguru 无疑Neng提升开发人员效率。本文仅介绍了一些常用的方法,想要详细了解可参考 Loguru 官方文档 或关注 Loguru GitHub 。

日志就是跟踪柔软件运行时事件的方法,为了Neng够在程序运行过程中记录错误。

通过日志记录程序的运行, 方便我们查询信息,以便追踪问题、进行维护和调试、还是数据琢磨。

用 serialize Neng将日志转换为 JSON 格式, enqueue Neng保证许多线程、许多进程平安。

我们在开发过程中, 常用print函数来进行调试,但是在实际应用的部署时我们要将日志信息输出到文件中,方便后续查找以及备份。

Loguru 仅支持 Python 及以上的版本, 用 pip 安装即可:

Loguru 在输出 log 的时候还给了非常友优良的字符串格式化功Neng,相当于 str.format :

参考文档

Zui常见的是把输出函数 print 当作日志记录的方式,直接打印各种提示信息,常见于个人练习项目里通常是懒得单独配置日志,而且项目太细小不需要日志信息,不需要上线,不需要持续运行,完整的项目不推荐直接打印日志信息,现实中也差不离没有人这么Zuo。

在控制台的输出是这样的:

控制台输出:

add 函数的 retention 参数, Neng设置日志的Zui长远保留时候,比如设置日志文件Zui长远保留 个:

在以前我们用日志,geng许多的是用 python 自带的 logging 模块,它Neng设置错误等级、输出方式等。

在Python中,用logging模块来进行日志的处理。

修改时候格式。

logging是Python的内置模块, 基本上用于将日志信息进行格式化内容输出,可将格式化内容输出到文件,也可输出到屏幕。

我们先来思考下下面的两个问题:

下面介绍一个 python 库: loguru 。 guru 是印度语中巨大师的意思, loguru 直译就是“日志巨大师”。

那么怎样才Neng在不改动应用程序代码的情况下 根据事件的关键性或者称之为等级,实眼下不同的周围中,记录不同详细程度的日志呢?

Loguru 的基本上概念是只有一个:logger

logging 模块虽然有力巨大, 但是其配置也是比比kan繁琐的,在巨大型项目中通常需要单独初始化日志、配置日志格式等等,K哥在日常用中通常dou会对 logging Zuo如下的封装写法,使日志Neng按天保存,保留15天的日志,Neng配置是不是输出到控制台和文件,如下所示:

自写日志模板适合比比kan细小的项目,Neng按照自己的喜优良编写模板,不需要太许多麻烦配置,方便迅速捷,但是这种记录日志的方式并不是hen规范,有兴许你自己觉得阅读体验不错,但是别人在接触你的项目的时候往往需要花费一定的时候去学日志的逻辑、格式、输出方式等,比比kan巨大的项目同样不推荐这种方法。

我们不需要像 logging 模块一样再声明一个 FileHandler 了 就一行 add 语句搞定,运行之后会找到目录下 test.log 里面同样出现了刚刚控制台输出的 debug 信息。

Loguru 对输出到文件的配置有非常有力巨大的支持, 比如支持输出到优良几个文件,分级别分别输出,过巨大创建新鲜文件,过久自动删除等等。 下面我们来详细kan一下 add 语句的详细参数:

在我们用日志管理时我们也Neng将日志格式化成Json对象转存到ELK中方便图形化查kan及管理。

当然 Ru果你不需要hen麻烦的功Neng,希望简洁一点,仅仅需要在控制台输出一下日志的话,也Neng只进行轻巧松的配置:

输出:

其中 sink 是Zui关键的参数,Neng传入不同的数据类型。传入文件路径、 文件句柄、 sys.stderr 、甚至 logging 模块的 Handler 如 FileHandler 、 StreamHandler 等,这样就Neng飞迅速实现自定义的 Handler 配置。

与 add 语句相反, remove 语句Neng删除我们添加的配置:

标签:

提交需求或反馈

Demand feedback