gpt4 book ai didi

swift - 以最少的工作和维护在 Swift 日志行中捕获局部变量

转载 作者:行者123 更新时间:2023-12-04 09:56:28 25 4
gpt4 key购买 nike

我正在尝试将局部变量值/名称添加到我的 Swift 日志行中。开箱即用的 Swift 提供了一种使用 #file 装饰日志行的好方法, #functionwithout explicit effort .我还想更进一步,在日志站点上收集范围内的所有局部变量。

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 的工具,在编译前注入(inject)本地 var maps 可能是最可行的选择,但也有其挑战。如何编辑转换前的版本但让 Xcode 编译转换后的版本?我可以只转换自上次转换后我编辑的文件吗? Xcode 是否索引我的文件的转换前或转换后版本?
  • 手动继续在数以千计的日志行中编写(并维护和浏览)令人讨厌的局部变量字典。呃
  • 忘记整个想法那将是一个遗憾。在我的事件日志中包含本地人(即使只是在开发中运行时)使这些日志更容易理解

  • 我真的希望有人有一个绝妙的建议,因为上述选项似乎都没有启发性

    最佳答案

    我不确定这个问题是否符合 SO 目的。它是关于编程的,是的,但它是关于一种众所周知的状态(你不能在 Swift 中这样做),涵盖很多主题,会导致一个固执己见的答案,你应该做什么,......
    我不是在寻找赏金,但很难写出有意义和简短的评论,所以这里是“答案”。

    Propose the Swift team add a #localVars special literal

    Seems unlikely, they have a lot on their plate already, plus I may be the only person who wants it


    除非您将此类问题/讨论移至:
  • https://forums.swift.org
  • 或通过 https://bugs.swift.org/ 报告 RFE

  • 我不确定 SO 上有多少 Swift 工程师。看到了几个,但是我提到的这两个地方肯定是这个问题的更好地方。

    Fork Swift and implement my own #localVars special literal

    Keeping up with changes to Swift would probably be more work than manually adding dictionaries of local variables to my log lines


    正如您所说,我希望这比手动构建这些字典要多得多。

    Wait for Swift compiler plugins to become a thing

    Could be a long time, forever perhaps


    从来没有,可能,不知道。这是 Ted response :
    我认为能够促进与 Swift 编译器更紧密集成的工具可能是对项目的一个很好的补充,如果它可以做得好的话。我主要担心的是插件界面的稳定性和安全性。
    &
    这些都没有设计,但是可以在这里 build 很多很棒的东西。如果您有兴趣进一步探索这一点,我认为很自然的一点是首先在 swift-dev 上确定技术方向。一个 swift-evolution 提案似乎是大量讨论和设计的自然产物,但我希望关于 Swift 的这种扩展的讨论可能更多地发生在 swift-devs 上,而不是 swift-evolution 因为它是关于内部的编译器和工具,而不是语言。

    Build a SourceKit-based tool to inject local var maps before compilation

    Probably the most feasible option, but has its challenges. How do I edit the pre-transform versions but get Xcode to compile the post-transform versions? Can I just transform the files I've edited since last transformation? Does Xcode index the pre or post transformation version of my files?


    使用 Xcode 会遇到很多问题。例如 - 我试图将 Swift 格式化程序集成到我的构建过程中并放弃了。 Xcode 在修改 Swift 文件时有很多问题。就像 - 您编辑文件,点击构建,Swift 格式化程序重新格式化,Xcode 构建它,您尝试再次编辑文件并出现对话框,如果您想重新加载文件,该文件已被修改,......我也试图在构建开始之前告诉 Xcode 保存所有内容,但没有奏效。它有时有效,有时无效。
    这可行吗?也许。我最终向 Apple 报告了它,但还没有反馈/修复。如果你决定走这条路,这只是你将面临的一个例子。

    Continue manually

    Write (and maintain and wade through) annoying dictionaries of local variables in thousands of log lines. Ugh


    这是一个问题——应该比较它的工作量。您是否能够以这种方式修改 Swift 编译器,使其花费的时间少于这项手动工作的总时间? future 呢?您愿意花时间合并更改和不断更新吗?特别是当内部结构可以改变时?
    因为我也想自动化很多事情,所以我总是问自己——值得吗?

    Forget the whole idea

    That would be a pity. Having locals in my incident logs (even just when running in development) makes those logs far easier to understand


    你真的需要日志中的所有本地人吗?这是个好主意吗?我不知道您的情况或您为什么开始考虑这个问题,但我不是污染日志的忠实粉丝。
    我们有一个调试器,我们可以设置断点,执行表达式然后自动继续的断点,您可以将它们存储在一个项目中,您可以访问 frame variable , ...
    你写道——即使只是在开发中运行——为什么不利用我们已经拥有的工具呢?例如,就像提到的断点一样。您是否考虑过安全/隐私方面?当您跳过此条件(仅限开发)时,它也将变为生产,这根本不是一个好主意。为什么你认为 Apple 会在日志中编辑数据(参见 Formatting Log Messages)?
    这些问题的主要目的是——你真的需要这个吗?还有其他方法吗?这是一个好主意吗?

    关于swift - 以最少的工作和维护在 Swift 日志行中捕获局部变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61910191/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com