Python3,2行代码就输出日志文件,从此跟logging模块说拜拜~ ~【赶紧收藏】(二)

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: Python3,2行代码就输出日志文件,从此跟logging模块说拜拜~ ~【赶紧收藏】(二)

3、 loguru模块


解释完logging模块,就到了今天的主角 loguru模块。

登场方式,必须闪亮。


3.1 安装


凡事都要第一步,loguru 也让不开的安装

pip install loguru


安装完成,就是这样:

image.png

当然,

如果不想每次都pip安装,直接跳转这两篇:


《Python3,选择Python自动安装第三方库,从此跟pip说拜拜!!》

《Python3,我低调的只用一行代码,就导入Python所有库!》


3.2 初识loguru


安装完成后, 我们来小试一下,看看有啥能耐:

编写代码:


# -*- coding:utf-8 -*-
# @Time   : 2021-10-21
# @Author : carl_DJ
from loguru import logger
#定义日志输出debug级别
logger.debug("output  debug message")



运行结果:


2021-10-21 23:25:12.565 | DEBUG    | __main__:<module>:5 - output  debug message


解析

输出的内容包含:


日期 :2021-10-21

时间:23:25:12.565

日志级别:DEBUG

日志代码行数:__main__:<module>:5

日志内容信息:output debug message


3.3 写文件


在loguru中,输出日志文件只需要一个 add() 函数即可:


# -*- coding:utf-8 -*-
# @Time   : 2021-10-22
# @Author : carl_DJ
from loguru import logger
#输出日志文件
logger.add('testDJ.log')
#设置日志输出等级
logger.debug("output  debug message")

直接运行后,会生成testDJ.log文件,如下:

image.png

控制台输出的内容:

image.png

日志文件信息

image.png

我们添加一些参数,指定日志输出格式和级别:


代码实例


# -*- coding:utf-8 -*-
# @Time   : 2021-10-22
# @Author : carl_DJ
from loguru import logger
#定义日志输出格式、级别
log = logger.add('testInfo.log', format="{time} | {level} | {message}", level="INFO")
#设置日志输出等级
logger.debug("output  debug message")
logger.info('output info message')


输出内容

image.png

敲黑板

因为设置的level 是 "INFO"级别,

所以,debug级别不会输出的。


3.4 停止写入文件


小屌丝:鱼哥,我不想把日志写入文件,怎么操作呢?

小鱼:嗯,你想的很全面,直接用logger.remove()就可以了。


当我们不想把日志写入文件,使用logger.remove()方法。


代码实例

# -*- coding:utf-8 -*-
# @Time   : 2021-10-22
# @Author : carl_DJ
from loguru import logger
#定义日志输出格式、级别
log = logger.add('testInfo.log', format="{time} | {level} | {message}", level="INFO")
#输出info级别日志
logger.info("output  debug message")
#移除日志文件内容
logger.remove(log)
#输出info级别日志
logger.info('output another info message')


输出结果:

image.png

敲黑板:

文件中只记录了 第一条信息,

第二条被使用logger.remove()方法,所以不会写入日志里面了。


3.5 滚动记录日志文件


小屌丝:这个可以啊, 那能不能指定日志的生成方式,例如:按照文件大小,时间等来指定生成。

小鱼:这也可以,直接在logger.add()方法里面配置rotation 值即可。


代码实例


# -*- coding:utf-8 -*-
# @Time   : 2021-10-22
# @Author : carl_DJ
from loguru import logger
# 超过300M就新生成一个文件
logger.add("size.log", rotation="300 MB")
# 每天凌晨1点生成一个新文件
logger.add("time.log", rotation="1:00")
# 2周生成一个新文件
logger.add("size.log", rotation="2 week")


3.6 指定日志文件有效期


小屌丝:指定日志文件有效期,这个能实现吗?

小鱼:弄破了博勒姆( no problem)…


直接在logger.add()方法里面配置retention 值即可。


代码实例

# -*- coding:utf-8 -*-
# @Time   : 2021-10-22
# @Author : carl_DJ
from loguru import logger
# 保留日志时长为30天
logger.add("file.log", retention="30 days")


3.7 配置压缩文件


小屌丝:如果日志文件太大,是否可以压缩呢

小鱼:那肯定的,logger.add()方法里面配置compression 值即可。


代码实例


# -*- coding:utf-8 -*-
# @Time   : 2021-10-22
# @Author : carl_DJ
from loguru import logger
# 日志文件压缩成zip格式
logger.add("file.log", compression="zip")



3.8 异常捕获


小屌丝:这给loguru厉害的,那我再升级难度问一下

小鱼:请出题。

小屌丝:请问,loguru能否捕获异常呢??

小鱼:额,容我想一下。

小屌丝:怎么样,被难住了吧

小鱼:就这?? 我是在想,loguru一共有几种捕获异常的方法。

小屌丝:…


3.8.1 catch捕获异常


catch,是以装饰器的形式存在,

用法为:@logger.catch


我们就算一道除法题,来看看catch捕获异常后,输出的信息是否足够详细。

题目:用3除以 0。


这道题,3岁小孩都知道 除数不能为0。


代码实例


# -*- coding:utf-8 -*-
# @Time   : 2021-10-22
# @Author : carl_DJ
from loguru import logger
#使用catch装饰器来捕获异常
@logger.catch
def test_function(a):
  return 3/a
#给a传参为0
test_functioin(0)

运行结果

image.png


我们可以看到,输出的信息,非常的详细,很奈斯!


3.8.2 excepiton 捕获异常


第二种捕获异常方法,使用exception。

代码实例


# -*- coding:utf-8 -*-
# @Time   : 2021-10-22
# @Author : carl_DJ
from loguru import logger
def x_function(a):
    try:
        return 3/a
    except ZeroDivisionError:
        #exception捕获异常
        logger.exception("exception!")
#给a传参为0
x_function(0)


运行结果

image.png

妥妥的,异常信息也很奈斯!!

小屌丝:妥,我要转粉为loguru了,谁都拦不住!!


3、总结


今天分享了两个日志模块:logging和loguru,

每个模块都有自己的优点,选择哪一个,只看各位同学的使用习惯了。

但是,不管怎样,使用自己熟练的方法,让程序零BUG,就是最初的本质的。

不要为了高大上而高大上。


相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
25天前
|
开发者 Python
如何在Python中管理模块和包的依赖关系?
在实际开发中,通常会结合多种方法来管理模块和包的依赖关系,以确保项目的顺利进行和可维护性。同时,要及时更新和解决依赖冲突等问题,以保证代码的稳定性和可靠性
42 4
|
5天前
|
Python
Python Internet 模块
Python Internet 模块。
100 74
|
23天前
|
算法 数据安全/隐私保护 开发者
马特赛特旋转算法:Python的随机模块背后的力量
马特赛特旋转算法是Python `random`模块的核心,由松本真和西村拓士于1997年提出。它基于线性反馈移位寄存器,具有超长周期和高维均匀性,适用于模拟、密码学等领域。Python中通过设置种子值初始化状态数组,经状态更新和输出提取生成随机数,代码简单高效。
104 63
|
24天前
|
测试技术 Python
手动解决Python模块和包依赖冲突的具体步骤是什么?
需要注意的是,手动解决依赖冲突可能需要一定的时间和经验,并且需要谨慎操作,避免引入新的问题。在实际操作中,还可以结合使用其他方法,如虚拟环境等,来更好地管理和解决依赖冲突😉。
|
24天前
|
持续交付 Python
如何在Python中自动解决模块和包的依赖冲突?
完全自动解决所有依赖冲突可能并不总是可行,特别是在复杂的项目中。有时候仍然需要人工干预和判断。自动解决的方法主要是提供辅助和便捷,但不能完全替代人工的分析和决策😉。
|
5天前
|
计算机视觉 Python
如何使用Python将TS文件转换为MP4
本文介绍了如何使用Python和FFmpeg将TS文件转换为MP4文件。首先需要安装Python和FFmpeg,然后通过`subprocess`模块调用FFmpeg命令,实现文件格式的转换。代码示例展示了具体的操作步骤,包括检查文件存在性、构建FFmpeg命令和执行转换过程。
29 7
|
25天前
|
Python
Python的模块和包
总之,模块和包是 Python 编程中非常重要的概念,掌握它们可以帮助我们更好地组织和管理代码,提高开发效率和代码质量
37 5
|
24天前
|
数据可视化 Python
如何在Python中解决模块和包的依赖冲突?
解决模块和包的依赖冲突需要综合运用多种方法,并且需要团队成员的共同努力和协作。通过合理的管理和解决冲突,可以提高项目的稳定性和可扩展性
|
3月前
|
开发者 Python
30天拿下Python之logging模块
30天拿下Python之logging模块
20 0
|
4月前
|
存储 JSON 安全
python logging模块
python logging模块
下一篇
DataWorks