苹果新的日志系统 (-)Unified Logging OSLog os_signpost

前言

苹果提出了新的日志系统,Unified Logging 它相比以前的 print NSLog 优越,苹果极力推荐使用新的日志系统

简单介绍 & 对比

  • 新的日志系统,夸多个平台Mac,ios,WachOS
  • 相比以前的系统更加的高效 (原理不是太清楚,好像说是在后台处理)
  • 日志组织的更有条理。有了 Log levels(default info debug error fault)一些第三方的日志如也有类似功能, 日志有分类的功能
  • 保护隐私功能,格式化信息
  • 自动提供很多有用信息
  • 可以通过控制台app查看日志
  • 日志不是可读文本(用console 及相关命令行工具 log 可以查),但可以打包获取,分发
  • 苹果提供了日志处理命令行工具
  • 可以使用配置文件对日志进行配置

详细说明一些 用法 工程代码见

Log Levels

  • Default 日志保存在内存里 主要存储产生错误的信息
  • Info 日志保存在内存里 主要存储对分析错误有用的信息
  • Debug 日志保存在内存中,在Debug状态下有用,主要用于开发阶段
  • Error 日志一直保存在数据仓库中,结合 Activity 使用,会有一个完整日志处理链 用存集成级别错误 process-level
  • Fault 日志一直保存在数据仓库中,结合 Activity 使用,会有一个完整日志处理链 多用于系统级别错误和多进程错误

个人认为一般我们使用info,debug和error三个级别

Listing 1 
Logging a default-level message
os_log("This is a log message.")
Listing 2 
Logging an info-level message
os_log("This is additional info that may be helpful for troubleshooting.", log: OSLog.default, type: .info)
Listing 3 
Logging a debug-level message for a specific subsystem
let customLog = OSLog(subsystem: "com.your_company.your_subsystem_name.plist", category: "your_category_name")
os_log("This is info that may be helpful during development or debugging.", log: customLog, type: .debug)

说明
  1. 我在测试时发现subsystem必须改为自己的 Bundle Identity 才能在控制台中显示日志
  2. 但是模拟器没有显示出 listing3 的日志

日志的格式化message

  1. 和NSLog的格式化类似
  2. 内置了一些格式
%dIntegers
%.2fFloats
%sStrings
        os_log("now build-in %{time_t}d ",Int(Date().timeIntervalSince1970))
        os_log("now %@ ", NSDate())
        os_log("uuid_t %@ ",NSUUID())
        os_log("self %@ ",self)
        os_log("string %s ","string")
        os_log("iec-bytes %{iec-bytes}d ",1024)

输出
now build-in 2018-12-28 15:53:49+0800
now Fri Dec 28 15:53:49 2018
uuid_t 94D53641-FEAA-4098-ABEE-877697FC64AC
self <LoggingDemo.ListController: 0x7fdc48418b40>
string string
iec-bytes 1 KiB

傻傻分不清单位意思点这里
遇到问题可以参考这里

日志的隐私 数据保护

// 数据保护
        os_log("name:%{PUBLIC}s", log: customLog, type: .info, "name")
        os_log("password:%{PRIVATE}@", log: customLog, type: .info, self)

        os_log("error name:%{PUBLIC}s", log: customLog, type: .error, "name")
        os_log("error password:%{PRIVATE}s", log: customLog, type: .error, "pwd")

很遗憾没成功,不管是在 debugger 状态还是非 debugger 状态 在控制台app中我都能看到数据

日志的显示

  1. console.app
  2. 命令行工具 在控制台 输入命令 log 通过 help 可以查看相关使用 这就先不展开了

未完 待续。

WWDC 2018:创建自定义的 Instrument 这个是 apple 视频文件的翻译,我实践过,并不能成功,也许是版本问题,也许是我某个地方错了。。。。

参考

Logging
wwdc session 405
中文翻译
我没有找的视频里的demo。就自己写了个demo, 记下自己的理解
使用 Logging 测量性能 signpost and instruments
Migrating to Unified Logging, Swift Edition
OSLog and Unified logging as recommended by Apple
Smarter Debugging with Unified Logging & Activity Tracing
Unified Logging and Activity Tracing
Activity Tracing in Swift
Measuring Performance with os_signpost

    原文作者:jianshudxw
    原文地址: https://www.jianshu.com/p/72c8abd52d5b
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞