【问题标题】:Apple Recommended Logging approach for SwiftApple 推荐的 Swift 日志记录方法
【发布时间】:2018-11-16 14:43:26
【问题描述】:

注意:

这不是链接问题的重复

目标:

  • 我不是在寻找 printNSLog 的差异
  • 事实上我不想使用它们中的任何一个(目前使用print
  • 我正在寻找Apple推荐的方式,只是似乎找不到命令/文档,我只知道它存在。

目前的实施:

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

问题

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

【问题讨论】:

  • 确保检查os.log。您可以在调试和发布期间使用其结果。见here
  • 这似乎是一个很好的机会来整合像 CocoaLumberjack 这样的开源软件,它有像 DDLogErrorDDLogWarnDDLogInfo 等宏这样的宏。
  • @Honey os.log 似乎很有趣,谢谢,你能把它作为答案发布,正是我想要的
  • 现在你可以使用github.com/apple/swift-log

标签: ios swift xcode error-logging oslog


【解决方案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)

一些很好的参考:

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

  • 提供不同的日志级别
  • 有不同的类别
  • privatepublic 日志
  • 它很轻巧,由 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/…
猜你喜欢
  • 2021-02-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-09
  • 2020-10-26
  • 1970-01-01
  • 1970-01-01
  • 2011-04-16
相关资源
最近更新 更多