loguru 日志中心实现

一、背景介绍

loguru是python中除了官方logging模块外最受欢迎的第三方python日志模块。写这篇博客的时候,loguru在GitHub上已经取得了21.8K个star的成绩。

logging作为官方日志支持虽然功能非常强大,但是需要一定的配置,例如日志输出格式等等。

而loguru旨在为开发者提供开箱即用的体验。正如仓库介绍中写的,Python logging made (stupidly) simple。

那么本文就是探索,怎么方便的在有多个功能模块的系统中,使用loguru管理所有的日志文件。

我希望使用一个python文件完成所有模块的日志配置,并且在对应模块要记录日志的时候导入我们定义的logger就可以将日志以指定格式记录到指定日志文件。

二、实际操作

创建上图的目录结构。

现在,我想在log.py中配置全部的logger,module1使用一个logger1,module2使用一个logger2,并且他们分别写入各自的log文件中。

log.py

from loguru import logger


logger.add(
    "/home/tqn/logurutest/logs/module1.log",
    filter=lambda record: record["extra"]["name"] == "module1",
    retention="7 days",
    rotation="10 MB",
    # format="",
)
logger.add(
    "/home/tqn/logurutest/logs/module2.log",
    filter=lambda record: record["extra"]["name"] == "module2",
)

logger1 = logger.bind(name="module1")
logger2 = logger.bind(name="module2")

在log.py中定义logger1,logger2,分别对应模块1和模块2,模块1使用logger1就会写入module1.log文件。

并且还设置了retention,7天之后会删除过时日志,rotation,日志文件超过10MB会换一个文件记录。还支持设置format,也就是日志的格式。

实现不同logger绑定不同日志文件的核心是filter。我们为module1.log设置了只有record["extra"]["name"] == "module1"的才能记录,并且为logger1绑定了属性name="module1",因此只有logger1才能写入module1.log文件。module2同理。

至于为什么是name,可不可以是其他的属性?这完全可以随便定义。重点是bind中的属性会被写入最后日志消息(json串)的extra当中,只要和filer匹配即可。

那么我们来测试一下。分别在func1.py和func2.py中写点日志。

func1.py

from config.log import logger1

logger1.info("这是模块1的INFO日志")

func2.py

from config.log import logger2

logger2.warning("这是模块2的WARNING日志")

分别运行一下。

控制台已经打印日志了,可以看到,info,waring日志有预设的颜色。

查看log文件,看到对应模块写入到对应的日志文件中了。

那么,我们的目标初步完成了,已经实现了不同模块使用不同logger写入不同log文件,并且所有的配置都可以在一个文件当中完成。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值