shadowrocket缴费
对于神策分析 iOS SDK 而言,通过日志系统不但可以了解到 SDK 的行为,而且便于我们排查问题。因此,日志系统是 SDK 中必不可少的一项功能。
对于 iOS 开发而言,在控制台打印日志的常用方式有 NSLog 和 printf,我们先来看一下两者的区别。
日志的内容会自动包含一些系统信息,例如:项目名称、时间等。另外,NSLog 还可以打印 OC 中的对象,并且输出的内容会自动换行。示例代码如下:
printf 只能打印 char 类型,并且内容不会自动换行,需要我们手动操作[1]。示例代码如下:
通过前面的介绍我们不难看出,在 iOS 平台上通过 NSLog 输出日志更有优势。既然如此,神策为什么不选用 NSLog 来进行日志输出呢?主要原因如下:
SALog 是一个日志系统,具有较好的扩展性和易用性,下面我们来看下 SALog 具体是如何实现的shadowrocket缴费。
目前 SALog 中最重要的功能就是在控制台输出日志(通过子类 SAConsoleLogger 实现),SAConsoleLogger 的主要原理是:实例化一个 iovec 结构体来容纳数据,然后通过 writev 函数来发送这些数据。
SALog 是一个日志系统,既可以用于控制台日志的打印也可以输出到本地文件。这样的日志系统有一套核心的设计标准:创建一个基类实现基本的逻辑,具体的模块通过继承基类并重写基类的方法实现功能。
······sage];}3.4 长度限制不同开发者的代码习惯是不同的,业务逻辑也是不同的,这就导致 SDK 采集的数据大小都是不确定的。如果开发人员想要查看采集的数据是否正确,就需要保证输出的日志信息是完整的。为了保证采集的数据都能完整打印,SALog 将低于 1024 * 4 Bytes 的日志数据存储在栈区,超过 1024 * 4 Bytes 的日志数据存储在堆区,以保证打印的完整性。核心代码如下所示:// SAConsoleLogger.m
SALog 的接口设计十分友好,使用起来也比较方便。只需要在初始化 SDK 时,打开日志输出功能即可:
埋点事件触发成功时,SDK 会输出【track event】字段开头的事件数据;埋点事件触发失败时,SDK 会输出相应的错误原因;
事件数据上报失败时,SDK 会输出【invalid message】字段开头的事件数据并输出错误原因。通常情况下,我们只希望在 DEBUG 模式下输出日志。此时,可以通过宏定义来解决此问题:
通过 SALog 可以在控制台上输出各种各样的日志信息,给我们排查线上问题带来了极大的便利。不过,SALog 并非完美的,还有一些改进的空间。
1、 当前没有对输出日志的级别进行控制,导致在开启日志的情况下,会将所有级别的日志进行输出;
本文主要介绍了神策分析 iOS SDK 日志系统的实现和使用,并对日志系统的未来进行了规划。希望通过这篇文章,大家能够对日志系统的实现和使用有更深入的了解。