之前因为比较喜欢 golang 的结构化日志模块 logrus,所以模仿写了个 loggus
最近项目原因,写了一段时间的 golang,又回到 python 中...
于是又接触到了自己写的 loggus,然后写了很多类似这样的代码
import loggus
def userInfo(name, age, phone):
loggus.withFields({
"name": name,
"age": age,
"phone": phone,
}).info("0.0")
userInfo("小明", 18, 10086)
# 输出
# time="2021-04-27 15:02:17.671655" level=info msg="0.0" name="小明" age=18 phone=10086
我自己写着写着发现,为结构化日志赋值时,很多 key 值,和变量的变量名是相同的,但我不得不重新写一遍。
就像上面的那个字典:
{
"name": name,
"age": age,
"phone": phone,
}
于是近期就在思考:是否可以自动取出该变量的变量名,自行完成赋值操作?
参考了较多的文章和 logging 源码之后,发现有一条思路是值得借鉴的:通过回溯调用栈,找到调用函数的源码,通过正则取出所需变量名,然后进行赋值。
最后实现了一个神奇的方法 loggus.withVariables
,类似这样:
import loggus
def userInfo(name, age, phone):
loggus.withVariables(name, age, phone).info("0.0")
# 输出
# time="2021-04-27 14:38:05.400769" level=info msg="0.0" name="小明" age=18 phone=10086
loggus.withVariables(
name,
age,
phone,
).info("0.0")
# 输出
# time="2021-04-27 14:38:05.400769" level=info msg="0.0" name="小明" age=18 phone=10086
if __name__ == '__main__':
userInfo("小明", 18, 10086)
最后总结:花里胡哨没啥用,哈哈哈
有兴趣的可以看下实现: https://github.com/CzaOrz/loggus
1
TimePPT 2021-04-27 15:54:16 +08:00 1
Python 有 loguru 呀
https://github.com/Delgan/loguru |
2
xingheng 2021-04-27 16:28:19 +08:00 1
不需要 inspect,直接调用内置的 locals() 就行了
|
3
est 2021-04-27 16:30:53 +08:00 1
f"{name=}, {age=}"
|
7
no1xsyzy 2021-04-28 10:33:28 +08:00
写成装饰器(
|