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日志并进行多维度分析。
目录
相关文章
|
5天前
|
存储 Oracle 关系型数据库
【赵渝强老师】MySQL InnoDB的数据文件与重做日志文件
本文介绍了MySQL InnoDB存储引擎中的数据文件和重做日志文件。数据文件包括`.ibd`和`ibdata`文件,用于存放InnoDB数据和索引。重做日志文件(redo log)确保数据的可靠性和事务的持久性,其大小和路径可由相关参数配置。文章还提供了视频讲解和示例代码。
107 11
【赵渝强老师】MySQL InnoDB的数据文件与重做日志文件
|
1月前
|
自然语言处理 数据处理 Python
python操作和解析ppt文件 | python小知识
本文将带你从零开始,了解PPT解析的工具、工作原理以及常用的基本操作,并提供具体的代码示例和必要的说明【10月更文挑战第4天】
292 60
|
5天前
|
SQL Oracle 关系型数据库
【赵渝强老师】Oracle的控制文件与归档日志文件
本文介绍了Oracle数据库中的控制文件和归档日志文件。控制文件记录了数据库的物理结构信息,如数据库名、数据文件和联机日志文件的位置等。为了保护数据库,通常会进行控制文件的多路复用。归档日志文件是联机重做日志文件的副本,用于记录数据库的变更历史。文章还提供了相关SQL语句,帮助查看和设置数据库的日志模式。
【赵渝强老师】Oracle的控制文件与归档日志文件
|
3天前
|
Windows Python
如何反向读取Windows系统日志EVTX文件?
以下是如何反向读取Windows系统日志EVTX文件
12 2
|
28天前
|
安全 Linux 数据安全/隐私保护
python知识点100篇系列(15)-加密python源代码为pyd文件
【10月更文挑战第5天】为了保护Python源码不被查看,可将其编译成二进制文件(Windows下为.pyd,Linux下为.so)。以Python3.8为例,通过Cython工具,先写好Python代码并加入`# cython: language_level=3`指令,安装easycython库后,使用`easycython *.py`命令编译源文件,最终生成.pyd文件供直接导入使用。
python知识点100篇系列(15)-加密python源代码为pyd文件
|
5天前
|
Oracle 关系型数据库 数据库
【赵渝强老师】Oracle的参数文件与告警日志文件
本文介绍了Oracle数据库的参数文件和告警日志文件。参数文件分为初始化参数文件(PFile)和服务器端参数文件(SPFile),在数据库启动时读取并分配资源。告警日志文件记录了数据库的重要活动、错误和警告信息,帮助诊断问题。文中还提供了相关视频讲解和示例代码。
|
10天前
|
开发者 Python
Python中__init__.py文件的作用
`__init__.py`文件在Python包管理中扮演着重要角色,通过标识目录为包、初始化包、控制导入行为、支持递归包结构以及定义包的命名空间,`__init__.py`文件为组织和管理Python代码提供了强大支持。理解并正确使用 `__init__.py`文件,可以帮助开发者更好地组织代码,提高代码的可维护性和可读性。
13 2
|
1月前
|
Linux 区块链 Python
Python实用记录(十三):python脚本打包exe文件并运行
这篇文章介绍了如何使用PyInstaller将Python脚本打包成可执行文件(exe),并提供了详细的步骤和注意事项。
51 1
Python实用记录(十三):python脚本打包exe文件并运行
|
26天前
|
Java Python
> python知识点100篇系列(19)-使用python下载文件的几种方式
【10月更文挑战第7天】本文介绍了使用Python下载文件的五种方法,包括使用requests、wget、线程池、urllib3和asyncio模块。每种方法适用于不同的场景,如单文件下载、多文件并发下载等,提供了丰富的选择。
|
27天前
|
数据安全/隐私保护 流计算 开发者
python知识点100篇系列(18)-解析m3u8文件的下载视频
【10月更文挑战第6天】m3u8是苹果公司推出的一种视频播放标准,采用UTF-8编码,主要用于记录视频的网络地址。HLS(Http Live Streaming)是苹果公司提出的一种基于HTTP的流媒体传输协议,通过m3u8索引文件按序访问ts文件,实现音视频播放。本文介绍了如何通过浏览器找到m3u8文件,解析m3u8文件获取ts文件地址,下载ts文件并解密(如有必要),最后使用ffmpeg合并ts文件为mp4文件。