-
Notifications
You must be signed in to change notification settings - Fork 1.4k
利用 QMUILog 提高调试效率
QMUI iOS 2.4.0 版本增加了一个新控件——QMUILog,用于代替系统原生的 NSLog,本文简单介绍一下使用场景和使用方法。
相比 Android 而言,iOS 原生的 NSLog() 功能较弱,没有 log 类型分组、优先级区分,且 IDE Xcode 也无法过滤 log,所以在调试过程中自己关注的 log 经常会淹没在大量其他 log 中,难以识别。
基于这些缺陷,我们增加了 QMUILog 控件,它主要提供的功能有:
提供优先级的概念,按照 QMUILog()
、QMUILogInfo()
、QMUILogWarn()
3个维度划分,你可以自行决定某个 log 要以哪个级别输出。
QMUILogInfo(@"Default", @"不重要的信息,适合用 info");
而如果你有用配置表,则可以通过配置表全局控制是否要输出这个等级的 log。
QMUICMI.shouldPrintDefaultLog = YES; // ShouldPrintDefaultLog : 是否允许输出 QMUILogLevelDefault 级别的 log
QMUICMI.shouldPrintInfoLog = YES; // ShouldPrintInfoLog : 是否允许输出 QMUILogLevelInfo 级别的 log
QMUICMI.shouldPrintWarnLog = YES; // ShouldPrintInfoLog : 是否允许输出 QMUILogLevelWarn 级别的 log
提供分组的概念,每个 log 都需要指定一个 name,你可以为相同模块的 log 指定相同的 name,例如相册控件的 log 可以这么写:
QMUILog(@"QMUIAssetLibrary", @"选中第 %@ 张图片", @(xxx));
QMUILogWarn(@"QMUIAssetLibrary", @"读取资源错误,error is %@", error);
通过 QMUIKit 自带的 QMUILogManagerViewController
提供过滤的功能(最关键),可让控制台只显示某个指定 name 的 log,这样就不会受到其他无关 log 的影响(读某个关键 log 的时候忽然被大量其他 log 推走的感受历历在目)。在 log name 超过一定数量时还会提供搜索框和右边的 section index 索引条方便检索。
注意只有曾经打印过的 log name 才会出现在列表里。另外 NSLog()
的 log 暂时无法被过滤,后续会优化这一点。
QMUILog 会输出一些额外的辅助信息,包括方法名、代码行数、log 级别、log name,这些是默认的内容,业务项目也可通过 QMUILoggerDelegate
自定义自己想要的输出内容及格式,甚至把 log 内容记录到本地文件。
QMUILog 的使用方式与 NSLog 基本一致,只是多了一个必填的参数,也即第一个参数 name。
// 如果是以前
NSLog(@"选中了第 %@ 张图", @(xxx));
// 用 QMUILog 的话
QMUILogInfo(@"ImagePicker", @"选中了第 %@ 张图", @(xxx));
// 如果这个 log 不需要 name,则随便指定一个
QMUILog(@"Default", @"选中了第 %@ 张图", @(xxx));
如果需要过滤 log,则建议在 DEBUG 下为 App 增加一个彩蛋界面,初始化一个 QMUILogManagerViewController
对象即可。
#ifdef DEBUG
QMUILogManagerViewController *viewController = [[QMUILogManagerViewController alloc] init];
[self.navigationController pushViewController:viewController animated:YES];
#endif
更多的示例代码可下载最新的 QMUI Demo 查看。