- 在开发
Network Extension应用时, 为了方便调试, 需要实时查看日志的输出信息 - 但是,
宿主APP和Network Extension是两个不同的进程, 并不能同时在Xcode控制台输出, 而是需要切换Attach to Process单独查看
- 为了同时查看
宿主APP和Network Extension的输出日志, 我们可以使用控制台APP
一、os.log
- 要在
控制台APP中查看我们自己应用的日志, 就需要用到os.log库
import os.log
- 我们需要创建一个
OSLog对象, 配置输出日志的分类信息, 传递两个参数subsystem用于定义日志的子系统,通常是你应用的一个大模块或大部分功能。它帮助你在多个日志中标识这个日志属于哪个大模块category是对日志的进一步细分,用于将日志按类别进行分类。不同的category可以帮助你区分日志的类型或者日志的具体用途。
let log = OSLog(subsystem: "com.yourcompany.networkextension", category: "network_vpn")
- 在需要打印日志的地方, 使用下面的代码, 可以配置五种不同级别的日志
os_log("[default]", log: log, type: .default)
os_log("[info]", log: log, type: .info)
os_log("[debug]", log: log, type: .debug)
os_log("[error]", log: log, type: .error)
os_log("[fault]", log: log, type: .fault)
二、Console.app
- 打开
控制台APP, 在左侧有个设备列表, 找到你要调试的设备, 然后在右上角输入category的参数值, 我这里用的是network_vpn
- 点击
控制台APP的开始按钮
- 运行
宿主APP, 然后就可以看到日志输出了, 默认情况下, 只能输出default、error、fault三种日志
-
在
控制台App的顶部工具栏中, 有一个操作选项, 其中包含两个选项- 包括简介信息:
info级别日志 - 包括调试信息:
debug级别日志
- 包括简介信息:
-
勾选后, 再次运行
宿主APP, 就可以看到info和debug级别的日志信息了
三、终端
- 还可以通过
终端监听OSLog的日志信息 - 打开终端, 输入命令
log stream --predicate 'subsystem == "com.yourcompany.networkextension"' --level debug
- 然后就可以监听
debug界别以上的所有日志, 命令行输出截图如下