一、Loguru简介
Loguru的主旨就是让程序员能方便优美的实现日志记录。您还记得配置记录器的繁琐过程吗?因为对此感到厌烦?让我们看看以前python日志记录器的创建过程吧。
import logging
#创建日志级别
logger = logging.getLogger(__name__)
logger.setLevel(logging.INFO)
#创建日志文件
handler_warn = logging.FileHandler('warning_log.txt')
handler_warn.setLevel(logging.INFO)
#定义日志格式
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
handler_warn.setFormatter(formatter)
#将日志处理程序记录到记录器
logger.addHandler(handler_warn)
以上还是最简单的配置过程,是否感到很繁琐。确实如此,但是记录是每个应用程序的基础,并简化了调试过程。使用Loguru,您没有理由不从一开始就使用日志记录,这很简单。只需要引入loguru库即可,而且loguru的性能也非常好,因为Loguru的关键功能将以C语言实现,以实现最高速度。
from loguru import logger
另外,该库旨在通过添加一堆有用的功能来减轻Python日志记录的痛苦,这些功能可以解决标准记录器的问题。在您的应用程序中使用日志应该是自动的,Loguru试图使其变得既愉快又强大。
二、Loguru安装
安装方法很简单。
pip install loguru
三、Loguru使用
1、简单使用
from loguru import logger
logger.debug("That's it, beautiful and simple logging!")
结果显示彩色,非常的优美。
2、日志格式
根据自己的需求配置日志格式,也非常简单,只需要简单配置即可完成。如下:
import sys
from loguru import logger
#配置日志格式
logger.add(sys.stderr, format="{time} {level} {message}", filter="my_module", level="INFO")
logger.info("That's it, beautiful and simple logging!")
logger.debug("That's debug")
logger.warning("That's warning")
结果,不同的颜色显示:
3、日志文件
如果要将记录的消息保存到文件,则只需使用字符串路径作为接收器。配置如下:
logger.add("file_{time}.log")
如果需要设置日志文件大小、删除较旧的日志文件或希望在关闭时压缩文件,并设置压缩格式,这些都可以进行配置,而且配置起来非常简单。如下:
#rotation参数
logger.add("file_1.log", rotation="500 MB") # 设置日志文件大小
logger.add("file_2.log", rotation="12:00") # 中午12点创建日志文件
logger.add("file_3.log", rotation="1 week") # 一周创建一个日志文件
#retention参数
logger.add("file_X.log", retention="10 days") # 日志文件最长保留 10 天
#compression参数
logger.add("file_Y.log", compression="zip") # 日志文件压缩格式为ZIP
4、字符串格式化
Loguru倾向于使用更优雅,更强大的{}
格式%
,日志记录功能实际上等效于str.format()
。
logger.info("If you're using Python {}, prefer {feature} of course!", 3.6, feature="f-strings")
结果:
5、Traceback捕获
您是否曾经看到程序意外崩溃而没有在日志文件中看到任何内容?您是否注意到没有记录线程中发生的异常?这可以使用catch()
装饰器/上下文管理器解决,该管理器可以确保将任何错误信息正确保存到logger
中。配置如下:
import sys
from loguru import logger
@logger.catch
def my_function(x, y, z):
# An error? It's caught anyway!
return 1 / (x + y + z)
my_function(1,-1,0)
结果:
6、色彩斑斓的日志
如果您的终端兼容,Loguru会自动为日志添加颜色。您可以通过使用接收器格式来自定义自己喜欢的样式。配置方式如下:
logger.add(sys.stderr, colorize=True, format="<green>{time}</green> <level>{message}</level>",level="DEBUG")
结果,DEBUG及以上的信息或被自定义显示样式。
7、异步写入日志
logger
默认情况下,添加到的所有接收器都是线程安全的。它们不是多进程安全的,但是您可以enqueue
通过消息来确保日志的完整性。如果要异步记录,也可以使用相同的参数。
logger.add("somefile.log", enqueue=True)
8、序列化日志
希望对日志进行序列化以便于解析或传递日志?使用该serialize
参数,每条日志消息在发送到已配置的接收器之前将转换为JSON字符串。
logger.add(custom_sink_function, serialize=True)
9、配置日期格式
logger.add(sys.stderr, format="{time:YYYY-MM-DD at HH:mm:ss} | {level} | {message}",level="DEBUG")
logger.info("If you're using Python {}, prefer {feature} of course!", 3.6, feature="f-strings")
logger.debug("That's debug")
logger.warning("That's warning")
结果:
10、配置编码格式
logger.add(log_file_path, rotation="500 MB", encoding='utf8')
还有更多的配置方法,详细请参考官方文档。
四、参考
1、官方文档:https://loguru.readthedocs.io/en/stable/overview.html
2、官方github: https://github.com/Delgan/loguru