前言
用Python写代码的时候,在想看的地方写个print(),就能在控制台上显示打印信息,这样子就能知道它是什么了,
但是当我需要看大量的地方或者在一个文件中查看的时候,这时候print()就不大方便了,所以Python引入了loguru模块来记录我想要的信息。
print()也可以输出日志,loguru相对print()来说更好控制输出在哪个地方,怎么输出及控制消息级别来过滤掉那些不需要的信息。
logger中一共有5种级别的消息,分别是:
DEBUG < INFO < WARNING < ERROR < CRITICAL
可以在add()函数中指定level的级别,低于指定level级别的消息将不会打印在日志中。
如果没有指定level级别,则默认会打印所有级别的消息到日志中
安装
pip install loguru
初识
from loguru import logger
logger.debug("This is a debug...")
上面的代码运行结果如下:
2020-05-03 09:22:35.746 | DEBUG | __main__:<module>:3 - This is a debug...
可以看到其默认的输出格式中包含:有时间、级别、模块名、行号以及日志信息,不需要手动创建 logger,直接使用即可,另外其输出还是彩色的,高亮,看起来会更加友好。
以上的日志信息是直接输出到控制台的,并没有输出到其他的地方,是因为我们没有用add()方法来指定输出位置。
如果想要输出到其他的位置,也就是重定向,比如存在某个文件中,我们只需要使用一行代码声明即可,
一句add()就搞定了。
运行之后就可以在runtime.log里法发现打印的日志信息了。
from loguru import logger
logger.add("runtime.log")
logger.debug("This is a debug...")
logger.warning("This is a debug...")
使用
既然是日志,那么最常见的就是输出到指定文件了,及日志重定向。
loguru 对输出到文件的配置有非常强大的支持,比如支持输出到多个文件,分级别分别输出,过大创建新文件,过久自动删除等等。
下面我们分别看看这些怎样来实现,这里基本上就是 add 方法的使用介绍。
因为这个 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
)
看add()函数的源码,我们就知道该函数中有这么多的参数,如level,format,filter等
3.1/基本参数
基本参数是format,filter,level等
基本的输出格式为:
logger.add('runtime.log',
format="{time} {level} {message}",
filter="my_module",
level="INFO")
以上的意思是:只有info级别的日志才会打入到runtime.log这个文件中,其他级别的日志不会打到这个文件中
当然这可以随意更改的。
3.2/删除
另外添加 sink 之后我们也可以对其进行删除,相当于重新刷新并写入新的内容。
删除的时候根据刚刚 add 方法返回的 id 进行删除即可,看下面的例子:
from loguru import logger
trace = logger.add('runtime.log')
logger.debug('this is a debug message')
logger.remove(trace)
logger.debug('this is another debug message')
看这里,我们首先 add 了一个 sink,然后获取它的返回值,赋值为 trace。随后输出了一条日志,然后将 trace 变量传给remove 方法,再次输出一条日志,看看结果是怎样的。
控制台输出如下:
2020-05-03 09:55:11.005 | DEBUG | __main__:<module>:4 - this is a debug message
2020-05-03 09:55:11.005 | DEBUG | __main__:<module>:6 - this is another debug message
日志文件 runtime.log 内容如下:(会把之前打的日志清空掉,然后重新写入)
2020-05-03 09:55:11.005 | DEBUG | __main__:<module>:4 - this is a debug message
3.3/rotation配置
通过add()函数中的rotation参数,我们可以做到:
<1> 每天(每周)输出一个文件
logger.add('runtime_{time}.log', rotation="1 day")
logger.add('runtime_{time}.log', rotation='1 week')
我们在配置log名字时加上了一个time占位符,这样在生成文件的时候可以自动将时间替换进去,生成一个包含时间的log文件。
<2> 文件过大,自动分割日志文件
logger.add('runtime_{time}.log', rotation="500 MB")
我们在配置log名字时加上了一个time占位符,这样在生成时可以自动将时间替换进去,生成一个包含时间的log文件。
<3> 定时创建文件
logger.add('runtime_{time}.log', rotation='00:00')
这样就可以实现每天 0 点新创建一个 log 文件输出了。
3.4/retention
很多情况下,一些非常久远的log文件对我们来说并没有什么用处了,它白白占据了一些存储空间,不清除掉就会非常浪费。
retention 这个参数可以配置日志的最长保留时间。
比如我们想要设置日志文件最长保留 10 天,可以这么来配置:
logger.add('runtime.log', retention='10 days')
3.5/compression配置
loguru 还可以配置文件的压缩格式,比如使用 zip 文件格式保存,示例如下:
logger.add('runtime.log', compression='zip')
可选格式为"gz", "bz2", "xz", "lzma", "tar", "tar.gz", "tar.bz2",“tar.xz", "zip"