Apple 推荐的 Swift 日志记录方法
Posted
技术标签:
【中文标题】Apple 推荐的 Swift 日志记录方法【英文标题】:Apple Recommended Logging approach for Swift 【发布时间】:2018-11-16 14:43:26 【问题描述】:注意:
这不是链接问题的重复
目标:
我不是在寻找print
与 NSLog
的差异
事实上我不想使用它们中的任何一个(目前使用print
)
我正在寻找Apple推荐的方式,只是似乎找不到命令/文档,我只知道它存在。
目前的实施:
目前我正在使用带有一些全局函数的print
语句
问题
-
处理错误的推荐方式/方法是什么(我不想使用 NSLog,因为它们会写入设备的控制台)
这仅用于开发期间的调试目的
【问题讨论】:
确保检查os.log
。您可以在调试和发布期间使用其结果。见here
这似乎是一个很好的机会来整合像 CocoaLumberjack 这样的开源软件,它有像 DDLogError
、DDLogWarn
、DDLogInfo
等宏这样的宏。
@Honey os.log
似乎很有趣,谢谢,你能把它作为答案发布,正是我想要的
现在你可以使用github.com/apple/swift-log
【参考方案1】:
看看os_log
。它提供了您正在寻找的所有东西。
新的东西
自 ios14 起提供的Logger API 也更易于使用。也见here
从 iOS15 开始,您还可以使用 OSLogStore
检索日志。见here
免责声明:
我强烈建议您查看this thread from Swift forums。 tl;博士
尽管它是 Apple 的建议,但由于对检索日志的担忧,它的使用存在争议:
检索日志不是一个简单的过程。其实很难。见here 对于大多数用户来说,日志文件可以是 100-300 Mbs。这使得发送变得困难。它非常适合在开发过程中进行调试,但由您的应用用户触发、检索、发送很费力。
示例:
let customLog = OSLog(subsystem: "com.your_company.your_subsystem_name", category: "Category")
os_log("This is info that may be helpful during development or debugging.", log: customLog, type: .debug)
一些很好的参考:
WWDC 2016 Unified Logging and Tracing。 这是 Rob 的 answer。他讨论了NSLog
已被弃用以及使用新的 os_log
库的一些好处。
您也可以使用here 提到的方法获取日志。确保您看到 ? 个答案。
os_log
之所以如此强大是因为:
private
和 public
日志
它很轻巧,由 Apple 制造。不需要豆荚
与仅在调试期间可用的print
不同,os_log
可用于(实时)查看已发布的应用程序并在控制台应用程序中查看日志。
这非常适合观察应用程序生命周期的变化而不受 greedy Xcode 的影响,即如果您在连接到 Xcode 时进行调试,那么 Xcode 不允许应用程序处于挂起状态...
注意:os_log
仅适用于+iOS10
还有来自 WWDC 2018 和 2019 的新视频,但更关注os_signpost
。见:
【讨论】:
您好,我的应用发布后如何读取os_log?? 您需要实际设备或系统诊断。见here 谢谢,用户可以通过邮件发给我吗?像 log.txt 文件?? 这将是 100-300Mb 的文件。所以不行。他们可以使用 Dropbox。但是创建系统诊断并发送它的过程并不是大多数用户能够做到的。我真的想知道苹果认为哪些用户会使用它...... 使用 os_log 的一个问题是您无法传递动态字符串,因此您无法将其隐藏在您自己的调试函数中,从外部获取参数。您必须在您的代码中明确使用它,例如:os_log("User %PRIVATE@ logged in", log: OSLog.userFlow, type: .info, username) 有 12/2018 提议来缓解此问题forums.swift.org/t/…以上是关于Apple 推荐的 Swift 日志记录方法的主要内容,如果未能解决你的问题,请参考以下文章