Swift 应用中的日志记录:初学者最佳实践

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

Swift 应用中的日志记录:初学者最佳实践



日志记录是开发者工具库中最重要的工具之一。没有它,在生产环境中调试复杂错误就像在咖啡渣上占卜一样。在本文中,我们将从基础到高级技术,详细讲解 iOS 和 macOS 平台下 Swift 应用日志记录的最佳实践。您将学习如何不仅仅是向控制台输出文本,而是构建一个能帮助您快速发现和修复 bug 的系统。



为什么不应该在生产环境中使用 print()?



许多初学者开发者使用 print() 来输出调试信息。这在开发阶段有效,但在成品应用中,这种方法会带来许多问题:



  • 没有级别控制:您无法只过滤错误或只过滤警告。
  • 性能下降:print() 会同步阻塞线程,可能导致 UI 出现明显卡顿。
  • 缺乏分类:所有消息混在一起,无法判断消息来自哪个模块。
  • 没有持久性:print() 的输出不会保存在用户设备上,应用崩溃后您无法分析日志。
  • 安全问题:意外遗留的 print() 可能会向控制台输出敏感数据。


请使用 Unified Logging 框架中的 os_log 来代替 print()(自 iOS 10 / macOS 10.12 起可用)。



配置 OSLog:基础示例



首先,导入 os.log 框架并为您的模块创建一个 logger 对象:



import os.log

let logger = Logger( subsystem: "com.yourapp.networking", category: "API")

func fetchUsers() { logger.info("开始加载用户...") // 请求逻辑 logger.debug("获取到 \\(usersCount) 个用户")}


参数解析:

  • subsystem — 通常是您应用的标识符(bundle ID)。允许按应用对日志进行分组。
  • category — 模块或组件的名称(例如 "UI", "Network", "Database")。


在 Xcode 中,您可以在控制台中按 subsystem 和 category 过滤日志,这大大简化了分析过程。



日志级别:何时使用什么?



Unified Logging 支持 6 个日志级别。正确选择级别是成功的一半:



  • debug — 用于开发期间的调试。不会保存在用户设备上(除非启用了特殊的性能分析)。
  • info — 用于分析时可能有用的重要事件(例如,屏幕启动、成功请求)。
  • notice — 标准级别。用于不是错误但值得关注的事件。
  • error — 用于可处理的错误(例如,无法加载数据,但应用继续运行)。
  • fault — 用于导致应用崩溃或数据丢失的严重故障。
  • critical — 很少使用,用于特别严重的情况(例如,数据库损坏)。


import os.log

let logger = Logger(subsystem: "com.yourapp", category: "general")

logger.debug("仅用于调试:\\(someVariable)")logger.info("用户打开了个人资料页面")logger.notice("检测到非标准场景")logger.error("网络错误:\\(error.localizedDescription)")logger.fault("严重错误:应用崩

博客

书籍推荐