写了很多年的python日志都是使用内置的logging模块来完成的,使用时都需要经过繁琐的配置。有时候,还可能出现丢失日志的情况,直到loguru的出现。
loguru真的是十分的简单的,安装之后直接导入到python代码块中即可直接使用。
1、安装环境
我们还是按照pip的方式来进行安装,默认使用清华大学的镜像站。
pip install loguru -i https://pypi.tuna.tsinghua.edu.cn/simple
安装完成后就可以直接开始使用了。
2、常规日志打印
在控制台打印常规日志时不用添加任何的配置直接使用,使用完成后我们可以来验证一下打印效果。
from loguru import logger
# 使用debug级别打印一行日志
logger.debug('I am debug message.')
下面是我在pycharm上面取下来的日志效果图。
可以看一下效果还是令人满意的,这颜色搭配也比较nice,并且日志时间精确到秒级。想要看到的日志信息也基本囊括了。
3、写入日志文件
想写入日志文件也是比较简单不用配置,只需要调用add函数添加文件即可。
# 添加日志文件
logger.add('./message-info.log')
# 打印一行debug日志
logger.debug('I am debug message.')
此时,不仅控制台会出现一行日志,并且在message-info.log文件中也写入了一条dubug日志信息。
若是在写入文件时想要指定自己的输出格式,则可以直接在add函数直接设置即可,同时可以设置输出到日志文件中的级别。
# 按照特定的格式将info级别的日志写入到日志文件中
log = logger.add('./info.log',format='{time} | {level} | {message}',level='INFO')
# 这时,多打印一些info级别的日志
logger.info('I am info message <1>.')
logger.info('I am info message <2>.')
logger.info('I am info message <3>.')
logger.info('I am info message <4>.')
logger.info('I am info message <5>.')
下面是在pycharm控制台打印的日志效果
下面是日志文件中的展示效果,跟我们设定的日志格式是一样的。
4、停止写入日志文件
在上述过程中我们添加自定义日志格式的日志信息到info.log文件中时特意返回了一个log变量。
这个log其实是返回了一个日志文件的id,在需要停止向该日志文件中写入日志时,只需要调用remove函数将该文件的日志id作为参数传入即可停止向日志文件中写入日志。
# 停止向日志文件中写入日志
logger.remove(log)
此时,后面的 日志文件将不会再写入日志文件中了。
5、滚动记录日志文件
在实际情况中,我们并不是只会有一个日志文件。当一个日志文件超过一定的大小、或是在一个特定的时间周期都可以通过参数的设定来生成新的日志文件继续记录日志。
# 超过10M生成一个新的日志文件
logger.add('info.log',rotation='10 MB')
# 每天凌晨一点生成一个新的日志文件
logger.add('info.log',rotation='01:00')
并且,为了防止日志文件在长时间的记录之后占用磁盘,一般还可以设置30天为周期清理日志文件,这样就又解决了磁盘爆满的问题。
# 设置该日志文件保留的时间为30天
logger.add('info.log',retention='30 days')
通常日志文件如果按照原始的方式存储,那么占用空间还是比较大的。loguru也为我们想到了,就是通过指定文件压缩的格式之后将日志文件进行压缩。
logger.add('info.log',compression='zip')
6、异常日志捕获
在实际coding过程中,特别是生产环境,若是出现一些异常信息没有被写入到日志文件中的情况时是特别难受的。在生产环境中,日志是解决问题的唯一办法。
loguru提供了注解的方式可以将发生异常的函数信息直接写入日志文件中,比如,有这样一个函数在运行过程中发生了异常。
@logger.catch
def func(param):
return 10 / param
func(0)
上面这个函数在分母是0的时候肯定是会抛出异常的,我们使用注解@logger.catch异常信息就会被写入。
同时,在日志文件中也会记录详细的异常信息。
【往期精彩】
英语没学好到底能不能做coder,别再纠结了先学起来...
数据清洗工具flashtext,效率直接提升了几十倍数!
一个help函数解决了python的所有文档信息查看...
python 自定义异常/raise关键字抛出异常
python 本地音乐播放器制作过程(附完整源码)