3、 loguru模块
解释完logging模块,就到了今天的主角 loguru模块。
登场方式,必须闪亮。
3.1 安装
凡事都要第一步,loguru 也让不开的安装
pip install loguru
安装完成,就是这样:
当然,
如果不想每次都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文件,如下:
控制台输出的内容:
日志文件信息
我们添加一些参数,指定日志输出格式和级别:
代码实例
# -*- 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')
输出内容
敲黑板
因为设置的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')
输出结果:
敲黑板:
文件中只记录了 第一条信息,
第二条被使用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)
运行结果
我们可以看到,输出的信息,非常的详细,很奈斯!
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)
运行结果
妥妥的,异常信息也很奈斯!!
小屌丝:妥,我要转粉为loguru了,谁都拦不住!!
3、总结
今天分享了两个日志模块:logging和loguru,
每个模块都有自己的优点,选择哪一个,只看各位同学的使用习惯了。
但是,不管怎样,使用自己熟练的方法,让程序零BUG,就是最初的本质的。
不要为了高大上而高大上。