大数跨境
0
0

【Python技巧】在Python中如何优雅地记日志

【Python技巧】在Python中如何优雅地记日志 AI算法之道
2021-08-06
1
导读:在编写调试Python代码过程中,我们经常需要记录日志,通常我们会采用python自带的内置标准库loggi

在编写调试Python代码过程中,我们经常需要记录日志,通常我们会采用python自带的内置标准库logging,但是使用该库,配置较为繁琐。

为了提升编程效率,本文重点介绍最近发现的一个宝藏第三方日志库Loguru,该库名字来自于印度语,含义为日志大师。



01


引言


我们先来做个直观的对比,来说明Loguru的优雅之处。
使用python自带的logging,样例代码如下

import logginglogging.basicConfig(level=logging.DEBUG,                    format='%(asctime)s - %(levelname)s: %(message)s')  
logging.debug("This is logging DEBUG test ")logging.info("This is logging INFO test ")logging.warning("This is logging WARN test ")logging.error("This is logging ERROR test ")

输出如下:

使用Loguru库,样例代码如下:

from loguru import loggerlogger.debug("This is loguru DEBUG test")logger.info("This is loguru INFO test")logger.warning("This is loguru WARN test")logger.error("This is loguru ERROR test")

输出如下:

使用Loguru输出日志,终端执行后出现带颜色的日志,看一眼基本就爱上了,而且使用超级方便有木有。。。


02


安装


直接使用pip进行安装即可,命令如下:

pip install loguru

默认输出到终端使用方式:

from loguru import loggerlogger.debug("msg msg msg!")

输出到文件使用方式:

from loguru import loggerlogger.add("file_name.log")logger.debug("msg msg msg!")


03


特性


我们参考官方github,里面给出了Loguru库丰富的特性,这里挑选几个重要的特性进行讲解:

1) 开箱即用

Loguru库设计的初衷就在于追求有且仅有一个logger,为了使用方便,提前预置输出样式。如果需要打印日志仅需采取如下方式:

from loguru import loggerlogger.debug("That's it, beautiful and simple logging!")

相当简单,对不咯?
2)无需初始化,导入函数即可使用
在Loguru中,我们如何自定义输出样式?如何过滤输出信息?如何设置日志级别?
答案是调用 add() 函数
示例如下:

from loguru import loggerlogger.add("info.log", format="{time} {level} {message}", filter="", level="INFO")logger.debug("This is a debug msg")logger.info("This is a info msg")

我们查看info.log,结果如下:

3) 更容易的文件日志记录与转存/保留/压缩方式

我们可以通过简单的配置,来让日志保存更加人性化。比如我们想要删除老的日志,或者我们希望自动压缩保存好的日志,可以参考一下命令:

# 文件过大(超过500M)就会重新生成一个文件logger.add("file_1.log", rotation="500 MB"# 每天12点创建新文件logger.add("file_2.log", rotation="12:00")  # 文件时间过长就会创建新文件logger.add("file_3.log", rotation="1 week"# 一段时间后会清空logger.add("file_4.log", retention="10 days"# 保存zip格式logger.add("file_5.log", compression="zip")   

4) 更优雅的字符串格式化输出

Loguru库对字符串的处理功能更加强大,字符串格式化输出支持{} 来替换%,功能类似于str.format()

```powershelllogger.info("If you're using Python {},         prefer {feature} of course!", 3.6,         feature="f-strings")```

5)可以在线程或主线程中捕获异常

我们经常会遇到代码出现crash时,我们在log里看不到任何错误的信息。在Loguru库中,可以通过 @logger.catch 装饰器来确保发生异常时,将错误信息保存下来。


样例如下:

@logger.catchdef my_function(x, y, z):    return 1 / (x + y + z)
res = my_function(0,0,0)print(res)

输出如下:

这个功能有多赞,再怎么夸都不过分吧!


04


总结


本文对Loguru库相关主要特性进行了简要概述,如果需要了解其更详细的特性说明,可参考官方代码仓。

最后推荐大家在日常工作生活中多多使用Loguru库进行日志处理工作。

【声明】内容源于网络
0
0
AI算法之道
一个专注于深度学习、计算机视觉和自动驾驶感知算法的公众号,涵盖视觉CV、神经网络、模式识别等方面,包括相应的硬件和软件配置,以及开源项目等。
内容 573
粉丝 0
AI算法之道 一个专注于深度学习、计算机视觉和自动驾驶感知算法的公众号,涵盖视觉CV、神经网络、模式识别等方面,包括相应的硬件和软件配置,以及开源项目等。
总阅读23
粉丝0
内容573