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

简介: 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日志并进行多维度分析。
目录
相关文章
|
1天前
|
JSON JavaScript 数据格式
python遍历目录文件_结合vue获取所有的html文件并且展示
python遍历目录文件_结合vue获取所有的html文件并且展示
4 0
|
3天前
|
开发者 Python
Python的os模块详解
Python的os模块详解
15 0
|
6天前
|
数据挖掘 API 数据安全/隐私保护
python请求模块requests如何添加代理ip
python请求模块requests如何添加代理ip
|
7天前
|
运维 Oracle 关系型数据库
Oracle日志文件:数据王国的“记事本”
【4月更文挑战第19天】Oracle日志文件是数据库稳定运行的关键,记录数据变更历史,用于恢复和故障处理。它们协调并发操作,确保数据一致性和完整性。日志文件实时写入操作信息并定期刷新到磁盘,便于数据恢复。然而,日志文件需备份和归档以保证安全性,防止数据丢失。日志文件,数据王国的“记事本”,默默守护数据安全。
|
8天前
|
存储 Python
用Python实现批量下载文件——代理ip排除万难
用Python实现批量下载文件——代理ip排除万难
|
8天前
|
测试技术 Python
Python 有趣的模块之pynupt——通过pynput控制鼠标和键盘
Python 有趣的模块之pynupt——通过pynput控制鼠标和键盘
|
8天前
|
JSON 关系型数据库 数据库
《Python 简易速速上手小册》第6章:Python 文件和数据持久化(2024 最新版)
《Python 简易速速上手小册》第6章:Python 文件和数据持久化(2024 最新版)
36 0
|
8天前
|
Serverless 开发者 Python
《Python 简易速速上手小册》第3章:Python 的函数和模块(2024 最新版)
《Python 简易速速上手小册》第3章:Python 的函数和模块(2024 最新版)
40 1
|
8天前
|
数据挖掘 索引 Python
Python 读写 Excel 文件
Python 读写 Excel 文件
12 0
|
8天前
|
数据安全/隐私保护 Python
Python文件与目录操作:面试中的高频考点
【4月更文挑战第15天】本文介绍了Python文件和目录操作的面试重点,包括文件的读写、目录遍历及权限管理。强调了文件关闭、异常处理、特殊文件判断以及权限位和权限字符串的理解。提供了代码示例,如读写文件、遍历目录和更改文件权限,帮助读者在面试中表现出色。掌握这些技能将对编程求职之路大有裨益。
17 0