loguru 日志模块
安装
pip install loguru
基本使用
from loguru import logger
logger.debug('this is a debug message')
如果想要输出到其他的位置,比如存为文件,我们只需要使用一行代码声明
from loguru import logger
logger.add('runtime.log')
logger.debug('this is a debug')
详细使用
loguru 对输出到文件的配置有非常强大的支持
比如支持输出到多个文件,分级别分别输出,过大创建新文件,过久自动删除等等。
add 方法就相当于给 logger 添加了一个 Handler,它给我们暴露了许多参数来实现 Handler 的配置,下面我们来详细介绍下
def add(
self,
sink,
*,
level=_defaults.LOGURU_LEVEL,
format=_defaults.LOGURU_FORMAT,
filter=_defaults.LOGURU_FILTER,
colorize=_defaults.LOGURU_COLORIZE,
serialize=_defaults.LOGURU_SERIALIZE,
backtrace=_defaults.LOGURU_BACKTRACE,
diagnose=_defaults.LOGURU_DIAGNOSE,
enqueue=_defaults.LOGURU_ENQUEUE,
catch=_defaults.LOGURU_CATCH,
**kwargs
):
pass
logger.add('runtime.log', format="{time} {level} {message}", filter="my_module", level="INFO")
rotation 配置
我们想一天输出一个日志文件,或者文件太大了自动分隔日志文件,我们可以直接使用 add 方法的 rotation 参数进行配置
logger.add('runtime_{time}.log', rotation="500 MB")
通过这样的配置我们就可以实现每 500MB 存储一个文件,每个 log 文件过大就会新创建一个 log 文件。我们在配置 log 名字时加上了一个 time 占位符,这样在生成时可以自动将时间替换进去,生成一个文件名包含时间的 log 文件
另外我们也可以使用 rotation 参数实现定时创建 log 文件
logger.add('runtime_{time}.log', rotation='00:00')
这样就可以实现每天 0 点新创建一个 log 文件输出了
我们也可以配置 log 文件的循环时间,比如每隔一周创建一个 log 文件
logger.add('runtime_{time}.log', rotation='1 week')
retention 配置
很多情况下,一些非常久远的 log 对我们来说并没有什么用处了,它白白占据了一些存储空间,不清除掉就会非常浪费。retention 这个参数可以配置日志的最长保留时间。 比如我们想要设置日志文件最长保留 10 天,可以这么来配置
logger.add('runtime.log', retention='10 days')
Traceback 记录
如果遇到运行错误,而我们在打印输出 log 的时候万一不小心没有配置好 Traceback 的输出,很有可能我们就没法追踪错误所在了。 但用了 loguru 之后,我们用它提供的装饰器就可以直接进行 Traceback 的记录
@logger.catch
def my_function(x, y, z):
# An error? It's caught anyway!
return 1 / (x + y + z)
我们做个测试,我们在调用时三个参数都传入 0,直接引发除以 0 的错误,看看会出现什么情况
\> File "run.py", line 15, in <module>
my_function(0, 0, 0)
└ <function my_function at 0x1171dd510>
File "/private/var/py/logurutest/demo5.py", line 13, in my_function
return 1 / (x + y + z)
│ │ └ 0
│ └ 0
└ 0
ZeroDivisionError: division by zero