Apple 推荐的 Swift 日志记录方法

Posted

技术标签:

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

注意:

这不是链接问题的重复

目标:

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

目前的实施:

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

问题

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

【问题讨论】:

确保检查os.log。您可以在调试和发布期间使用其结果。见here 这似乎是一个很好的机会来整合像 CocoaLumberjack 这样的开源软件,它有像 DDLogErrorDDLogWarnDDLogInfo 等宏这样的宏。 @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之所以如此强大是因为:

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

这非常适合观察应用程序生命周期的变化而不受 greedy Xcode 的影响,即如果您在连接到 Xcode 时进行调试,那么 Xcode 不允许应用程序处于挂起状态...


注意:os_log仅适用于+iOS10

还有来自 WWDC 2018 和 2019 的新视频,但更关注os_signpost。见:

WWDC 2018 - Measuring Performance Using Logging WWDC 2019 - Getting Started with Instruments WWDC 2019 - Developing a Great Profiling Experience

【讨论】:

您好,我的应用发布后如何读取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 日志记录方法的主要内容,如果未能解决你的问题,请参考以下文章

如何将应用程序日志写入文件并获取它们

程序员如何科学地记日志

使用 swift 记录方法签名

如何捕捉 Swift 崩溃并进行一些日志记录

java 数据同步 日志怎么记

PHP系列PHP推荐标准之PSR-3,日志记录器接口