iOS开发: 实时查看Network Extension日志信息

342 阅读2分钟
  • 在开发Network Extension应用时, 为了方便调试, 需要实时查看日志的输出信息
  • 但是, 宿主APPNetwork Extension是两个不同的进程, 并不能同时在Xcode控制台输出, 而是需要切换Attach to Process单独查看

image.png

  • 为了同时查看宿主APP和Network Extension的输出日志, 我们可以使用控制台APP

image.png

一、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

image.png

  • 点击控制台APP的开始按钮

image.png

  • 运行宿主APP, 然后就可以看到日志输出了, 默认情况下, 只能输出defaulterrorfault三种日志

image.png

  • 控制台App的顶部工具栏中, 有一个操作选项, 其中包含两个选项

    • 包括简介信息: info级别日志
    • 包括调试信息: debug级别日志
  • 勾选后, 再次运行宿主APP, 就可以看到infodebug级别的日志信息了

image.png

三、终端

  • 还可以通过终端监听OSLog的日志信息
  • 打开终端, 输入命令
log stream --predicate 'subsystem == "com.yourcompany.networkextension"' --level debug
  • 然后就可以监听debug界别以上的所有日志, 命令行输出截图如下

image.png