一、前言
日志不仅记录了程序的执行过程,同时也是分析问题的一种重要手段。
对于神策分析 iOS SDK 而言,通过日志系统不但可以了解到 SDK 的行为,而且便于我们排查问题。因此,日志系统是 SDK 中必不可少的一项功能。
下面针对神策分析 iOS SDK 日志系统进行解析,希望能够给大家提供一些参考。
二、日志打印方式
对于 iOS 开发而言,在控制台打印日志的常用方式有 NSLog 和 printf,我们先来看一下两者的区别。
2.1 NSLog
NSLog 是 Foundation 框架提供的日志输出函数,可以在控制台进行格式化输出。
日志的内容会自动包含一些系统信息,例如:项目名称、时间等。另外,NSLog 还可以打印 OC 中的对象,并且输出的内容会自动换行。示例代码如下:
//代码
NSString * a = @"Hello World!";
NSLog(@"这里是第一个%@", a);
NSLog(@"这里是第二个%@", a);
/**控制台日志:
2021-05-17 14:45:01.550403+0800 use-sdk[4608:164047] 这里是第一个Hello World!
2021-05-17 14:45:01.550498+0800 use-sdk[4608:164047] 这里是第二个Hello World!
*/
2.2 printf
printf 只能打印 char* 类型,并且内容不会自动换行,需要我们手动操作[1]。示例代码如下:
//代码
printf("Hello World!!!\nHello World!!!\nHello World!!!");
/**
Hello World!!!
Hello World!!!
Hello World!!!
*/
2.3 小结
通过前面的介绍我们不难看出,在 iOS 平台上通过 NSLog 输出日志更有优势。既然如此,神策为什么不选用 NSLog 来进行日志输出呢?主要原因如下:
1、 NSLog 只有简单的控制台打印输出,没有其他的输出方式;
2、 NSLog 打印格式相对单一,不够灵活,又无法自定义和扩展;
3、 NSLog 打印效率不高,而且有长度限制;
4、 如果客户重写了 NSLog,那么日志可能无法打印到控制台,影响问题定位。
为了解决上述问题,神策开发了自己的日志系统(SALog)来进行日志输出。