我正在尝试将局部变量值/名称添加到我的 Swift 日志行中。开箱即用的 Swift 提供了一种很好的方式来装饰日志行#file
,#function
而无需显式的努力。我还想更进一步,在日志站点上收集范围内的所有局部变量。
log(
message: "Things went sideways",
// I want to log the following dictionary of local variables without
// having to write, maintain or even see the dictionary
locals: ["foo": foo, "bar": bar, "baz": baz, "buz": buz]
)
撇开这是否是一个好主意(性能、安全性、隐私、线程安全等)不谈,自动将局部变量字典传递给日志函数的最佳方法是什么?我已经有了一个Mirror
基于 - 的解决方案,一旦捕获它们就可以对其进行编码。看来我的选择是:
- 建议 Swift 团队添加一个
#localVars
特殊的文字
似乎不太可能,他们的盘子里已经有很多了,而且我可能是唯一想要它的人 - Fork Swift 并实现我自己的
#localVars
特殊文字
跟上对 Swift 的更改可能比手动将局部变量的字典添加到我的日志行中更多的工作 - 等待 Swift 编译器插件成为一件事
可能会很长一段时间,也许永远 - 在编译之前构建一个基于 SourceKit 的工具来注入本地 var 映射
可能是最可行的选择,但也有其挑战。如何编辑转换前的版本但让 Xcode 编译转换后的版本?我可以只转换自上次转换后我编辑的文件吗?Xcode 是否索引我的文件的转换前或转换后版本? - 继续手动
在数千行日志中编写(并维护和遍历)烦人的局部变量字典。啊 - 忘记整个想法
那将是一个遗憾。在我的事件日志中包含本地人(即使只是在开发中运行时)使这些日志更容易理解
我真的希望有人有一个绝妙的建议,因为上述选项似乎都没有启发性