当前位置: 首页 > news >正文

在Xcode中查看设备日志的完整指南

目录

是否必须运行Xcode项目才能查看日志?

不运行项目时查看设备日志的方法

1. 使用控制台应用程序

​编辑

2. 使用命令行工具

3. 通过Xcode Devices窗口

在代码中记录日志的最佳实践

过滤和搜索日志的技巧

多个关键字的设置方法

1. 使用空格(默认 AND 逻辑)

2. 使用引号(精确短语搜索)

3. 使用逻辑运算符(OR, NOT)

4. 组合使用(构建复杂查询)

在 Xcode 控制台中的技巧

高级技巧:使用正则表达式 (Regex)

总结


是否必须运行Xcode项目才能查看日志?

不完全正确。虽然通过Xcode运行应用是最直接的查看日志方式,但还有其他方法可以访问设备日志,包括在不运行项目的情况下。

不运行项目时查看设备日志的方法

1. 使用控制台应用程序

macOS自带的控制台应用可以实时查看连接设备的日志:

  1. 连接iOS设备到Mac

  2. 打开"应用程序" > "实用工具" > "控制台"

  3. 在左侧选择您的iOS设备

  4. 即可查看设备的所有日志,包括系统日志和其他应用的日志

2. 使用命令行工具

通过命令行工具也可以获取设备日志:

# 查看连接的设备列表
xcrun xctrace list devices# 流式输出设备日志
xcrun xctrace stream --device <设备UDID> --level debug

或者使用log命令:

# 流式输出设备日志
log stream --device <设备UDID> --predicate 'process == "YourAppName"'

3. 通过Xcode Devices窗口

  1. 在Xcode中,选择"Window" > "Devices and Simulators"

  2. 选择连接的设备

  3. 点击底部"Open Console"按钮

  4. 即可查看设备实时日志

在代码中记录日志的最佳实践

为了更好地管理日志,建议使用统一的方式记录日志:

import os.logclass Logger {static let shared = Logger()private let log: OSLogprivate init() {log = OSLog(subsystem: "com.youcompany.yourapp", category: "general")}func debug(_ message: String) {os_log("%{public}@", log: log, type: .debug, message)}func info(_ message: String) {os_log("%{public}@", log: log, type: .info, message)}func error(_ message: String) {os_log("%{public}@", log: log, type: .error, message)}
}// 使用示例
Logger.shared.debug("这是一个调试信息")

过滤和搜索日志的技巧

无论是在控制台还是Xcode中查看日志,过滤都是关键:

  1. 进程名 (Process)process == "YourAppName"

    • 适用场景:快速聚焦于你的应用产生的所有日志,排除系统和其他应用的干扰。

    • 提示:在真机上,你的应用进程名后面可能会带一串数字(如YourAppName.12345),这时使用 process CONTAINS "YourAppName" 会更可靠。

  2. 子系统 (Subsystem)subsystem == "com.yourcompany.yourapp"

    • 适用场景:这是最精确的过滤方式。如果你在代码中使用了 OSLog 并指定了 Subsystem,这能完美地筛选出你需要的日志。

    • 提示:强烈推荐在代码中统一使用你自己的 Subsystem,这样排查问题极其方便。

  3. 级别 (Level)level >= error

    • 适用场景:快速找出错误(Error)和故障(Fault)级别的日志,这些通常是需要优先处理的问题。

    • 级别说明

      • fault (最高级,系统级错误)

      • error (应用级错误)

      • default (默认,普通信息)

      • info (调试信息)

      • debug (最详细,开发时用)

      • trace (最最低级,极少用)

  4. 类别 (Category)category == "Network"

    • 适用场景:如果你在代码中为 OSLog 创建了不同的 Category(如 "UI", "Network", "Database"),可以用这个来过滤特定功能模块的日志。

  5. 消息内容 (Message)message CONTAINS "login"

    • 适用场景:在所有日志中搜索包含特定词汇的条目。

多个关键字的设置方法

在控制台 (Console) 应用的搜索框或过滤器栏中,设置多个关键字有以下几种方式,其逻辑完全不同:

1. 使用空格(默认 AND 逻辑)

在搜索框中简单地用空格分隔多个词,控制台会执行 “AND” 操作,即搜索同时包含所有这些词的日志条目。

  • 示例error login

  • 效果:搜索既包含 “error” 又包含 “login” 的日志行。

  • 结果示例

    • [ERROR] User login failed (匹配)

    • User login successful (不匹配,没有 error)

    • [ERROR] File not found (不匹配,没有 login)

2. 使用引号(精确短语搜索)

引号将多个词括起来,表示要将它们作为一个完整的短语进行搜索。

  • 示例"failed to authenticate"

  • 效果:搜索完整包含 “failed to authenticate” 这个短语的日志行。

  • 结果示例

    • The user failed to authenticate with the server (匹配)

    • Authentication failed. Please try again. (不匹配,不是完整短语)

3. 使用逻辑运算符(OR, NOT)

控制台支持简单的逻辑运算符,让你构建更复杂的查询。

  • OR 操作:使用大写的 OR

    • 示例error OR fault

    • 效果:搜索包含 “error”  “fault” 的日志行。

  • NOT 操作:使用大写的 NOT 或减号 -

    • 示例1error NOT network

    • 示例2error -network

    • 效果:搜索包含 “error” 但不包含 “network” 的日志行。

4. 组合使用(构建复杂查询)

你可以将上述所有方法组合起来,创建强大的过滤条件。

  • 复杂示例1process == "YourApp" AND (level >= error OR message CONTAINS "exception")

    • 效果:过滤出你的应用中,所有错误级别以上的日志,或者消息里包含 “exception” 的日志。

  • 复杂示例2subsystem == "com.yourapp" AND message CONTAINS "http" AND -"200 OK"

    • 效果:在你的应用子系统中,找出所有包含 “http” 但不包含 “200 OK” 的日志(用于查找非200的HTTP请求)。

在 Xcode 控制台中的技巧

在 Xcode 底部调试控制台查看日志时,过滤更简单:

  1. 筛选按钮 (Filter Bar):点击控制台右下角的漏斗图标,可以按 DebugInfoError 等级别快速过滤。

  2. 搜索框

    • 直接输入关键词进行过滤。

    • 多个关键字:同样使用空格表示 AND。例如输入 error login 会只显示同时包含这两个词的行。

    • 不支持 ORNOT 等高级运算符,但可以通过正则表达式(见下文)。

  3. 右键菜单:在控制台消息上右键,可以选择 “Hide…” 来隐藏来自某个系统或类似消息。

高级技巧:使用正则表达式 (Regex)

无论是 macOS 控制台还是 Xcode 控制台,都支持正则表达式搜索,功能极其强大。

  • 在 macOS 控制台:点击搜索框,选择 “Regex” (或者使用快捷键 Cmd + R 切换)。

  • 在 Xcode:点击控制台搜索框最右边的图标,勾选 “Editor → Show Filters”,然后在弹出的过滤栏中选择正则表达式图标 .*

正则表达式示例

  • error|failure:查找包含 “error”  “failure” 的行(相当于 OR)。

  • (?i)null:不区分大小写地查找 “null”(NULLNullnull 都能匹配)。

  • \b5\d\d\b:查找所有5xx的HTTP状态码(如500, 503等)。

总结

不需要运行Xcode项目也能查看设备日志。通过macOS控制台、命令行工具或Xcode的Devices窗口,开发者可以访问连接设备的系统日志和应用日志。掌握这些技巧将大大提高调试效率,特别是在处理后台运行、推送通知或性能优化等场景时。

建议在开发过程中结合使用多种日志查看方法,并根据需要创建适当的日志过滤条件,以便快速定位和解决

http://www.dtcms.com/a/354624.html

相关文章:

  • 深度学习篇---VGGNet
  • 【SQL】计算一年内每个月份的周数据
  • 基于大型语言模型的自然语言到 SQL 转换研究综述:我们身处何处,又将前往何方?
  • MyBatis 动态 SQL 精讲:告别硬编码的智能拼接艺术
  • 【Depth与RGB对齐算法(D2C)】
  • PPT处理控件Aspose.Slides教程:在 C# 中将 PPTX 转换为 Markdown
  • 项目一系列-第7章 父子组件通信
  • vue3使用axios向spring boot 发送请求,请求响应时间快慢交替问题分析
  • 探索 Vertex AI 与 Elasticsearch
  • Ubuntu 从零到一搭建 Appium+Python 自动化环境(含下厨房真机实战)—2025 版
  • 导出wireshark的FLV RAW数据并进行分析
  • 第13集 当您的USB设备不在已实测支持列表,如何让TOS-WLink支持您的USB设备--答案Wireshark USB抓包
  • [数据结构] ArrayList与顺序表(下)
  • indexDB快速上手
  • 2015考研数学(二)真题
  • 让模糊物体变清晰的视频AI:快速提升画质指南
  • 51c大模型~合集175
  • pcl_案例2 叶片与根茎的分离
  • Redis发布订阅:实时消息系统的极简解决方案
  • MyBatis延迟加载
  • 云计算学习100天-第29天
  • Node.js 的模块化规范是什么?CommonJS 和 ES6 模块有什么区别?
  • Python DELL Logo
  • day1 ———C++———变量和字符串的使用
  • AI驱动企业数字化转型:解码未来三年的智能化变革密码
  • STAGEWISE实战指南:从集成到使用的完整解决方案
  • AI在商业领域的多元应用:从写作助手到精准运营,解锁AI商业工具新价值
  • 流程控制语句(3)
  • 操作系统中的死锁是什么意思
  • 农行广西区分行携手广西专精特新商会共探金融赋能专精特新企业新路径