
之前因为比较喜欢 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 PRO Python 有 loguru 呀 https://github.com/Delgan/loguru |
2 xingheng 2021-04-27 16:28:19 +08:00 不需要 inspect,直接调用内置的 locals() 就行了 |
3 est 2021-04-27 16:30:53 +08:00 f"{name=}, {age=}" |
7 no1xsyzy 2021-04-28 10:33:28 +08:00 写成装饰器( |