之前因为比较喜欢 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
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.