Apple 为 Swift 推荐的日志记录方法

Apple Recommended Logging approach for Swift

注:

这不是链接问题的重复

目标:

当前实施:

目前我正在使用 print 语句和一些全局函数

问题

  1. 推荐的错误处理方法是什么(我不想使用 NSLog,因为它们会写入设备的控制台)
  2. 这仅用于开发期间的调试目的

看看os_log。它提供了您正在寻找的所有东西。

新内容

也比较好用Logger API available since iOS14. See here也是

因为 iOS15 您还可以使用 OSLogStore . See here

检索日志

免责声明:

我强烈推荐你看this thread from Swift forums。 tl;博士

尽管它是 Apple 的推荐,但由于对检索日志的担忧,它的使用存在争议:

  • 检索日志不是一个简单的过程。其实很难。参见
  • 对于大多数用户来说,日志文件可以是 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 库的一些好处。
  • 您也可以使用提到的方法获取日志 。确保您看到 ? 个答案。

os_log之所以如此强大是因为:

  • 提供不同的日志级别
  • 有不同的类别
  • privatepublic 日志
  • 它很轻巧,由 Apple 打造。不需要 pods
  • 与仅在调试期间可用的 print 不同,os_log 可用于查看已发布的应用程序(实时)并查看控制台应用程序中的日志。

这非常适合在 greedy Xcode 之外观察应用程序生命周期变化,即如果您在连接到 Xcode 时进行调试,则 Xcode 不允许该应用程序处于暂停状态...


注意: os_log 仅适用于 +iOS10

WWDC 2018 和 2019 也有新视频,但更关注 os_signpost。参见: