打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
iOS调试技巧之Log

iOS调试技巧之Log

欢迎加QQ群讨论:157672725

为什么我的程序比别人耗内存、bug多、体验差?这些其实多多少少跟调试有关。调试能帮我们快速定位bug位置、优化程序运行速度等等。调试的方法很多,本文主要讲一下Log调试。
默认的NSLog局限太多,下面让我们看看如何实现一个不一样的Log。


Log

在调试的过程中,我们常常使用NSLog来向控制台输出一些信息。但是,NSLog的局限较大:

  • 无法log到文件
  • 不支持分级log
  • NSLog耗时,降低程序的运行效率

为了解决这个问题,早期工程我使用宏开关来做控制Log的输出:

#define __LOG__   8#if __LOG__&8#define HHLogErr(fmt, ...)  {NSLog((@"<Error> %s [Line %d] " fmt), __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__);}#else#define HHLogErr(x, ...)#endif#if __LOG__&4#define HHLogWarn(fmt, ...)   {NSLog((@"<Warning> %s [Line %d] " fmt), __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__);}#else#define HHLogWarn(x, ...)#endif#if __LOG__&2#define HHLogInfo(fmt, ...)   {NSLog((@"<Info> %s [Line %d] " fmt), __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__);}#else#define HHLogInfo(x, ...)#endif#if __LOG__&1#define HHLogVerbose(fmt, ...) {NSLog((@"<Verbose> %s [Line %d] " fmt), __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__);}#else#define HHLogVerbose(x, ...)#endif
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26

这种方式虽然能解决一部分问题,但是仍然不完美。后面在github上找到了Cocoa LumberJack https://github.com/CocoaLumberjack/CocoaLumberjack ,它能帮我们解决NSlog的局限问题。

效果:

实现:

1.pod安装CocoaLumberjack

pod 'CocoaLumberjack'
  • 1

2.新建一个类定义LOG_LEVEL_DEF 宏,并把该类.h文件添加到pch文件中

@interface HHProfile : NSObject#define LOG_LEVEL_DEF      DDLogLevelAll//注意:LOG_LEVEL_DEF不能改变,因为该宏在框架中需要使用[ DDLogLevelOff DDLogLevelError DDLogLevelWarning DDLogLevelInfo DDLogLevelDebug DDLogLevelVerbose DDLogLevelAll ]@end
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
#ifndef PrefixHeader_pch#define PrefixHeader_pch#import <UIKit/UIKit.h>#import <Foundation/Foundation.h>#import "HHProfile.h"#import "CocoaLumberjack.h"#endif
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

3.配置log

    // Add File Log    DDFileLogger* fileLogger = [[DDFileLogger alloc] init];    fileLogger.rollingFrequency = 60 * 60 * 24; // 24 hour rolling    fileLogger.logFileManager.maximumNumberOfLogFiles = 7;    [DDLog addLogger:fileLogger];    // Add Apple System Log    [DDLog addLogger:[DDASLLogger sharedInstance]];    // Enable XcodeColors    setenv("XcodeColors", "YES", 0);    // Add Standard lumberjack initialization    [DDLog addLogger:[DDTTYLogger sharedInstance]];    // And then enable colors    [[DDTTYLogger sharedInstance] setColorsEnabled:YES];    // Set colors for levels    [[DDTTYLogger sharedInstance] setForegroundColor:[UIColor blueColor] backgroundColor:nil forFlag:DDLogFlagInfo];    [[DDTTYLogger sharedInstance] setForegroundColor:[UIColor greenColor] backgroundColor:nil forFlag:DDLogFlagDebug];    [[DDTTYLogger sharedInstance] setForegroundColor:[UIColor lightGrayColor] backgroundColor:nil forFlag:DDLogFlagVerbose];    // Set format    HHLogFormatter* logFormatter = [[HHLogFormatter alloc]init];    [fileLogger setLogFormatter:logFormatter];    [[DDASLLogger sharedInstance] setLogFormatter:logFormatter];    [[DDTTYLogger sharedInstance] setLogFormatter:logFormatter];
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26

其中HHLogFormatter是我自定义的一个输出格式。它能输出日期、文件名、出错行数、出错信息、出错方法名等,更加方便调试。

4.其中log的分级分颜色显示是我最喜欢CocoaLumberjack的地方。实现颜色的不同显示需要安装插件Alcatraz(Alcatraz安装见http://blog.csdn.net/catch01/article/details/46275293),并搜索XcodeColors安装(安装完毕需重启Xcode生效),如下图。

项目地址: https://github.com/catchZeng/HHLog,如果喜欢的话帮忙加个Star谢谢!

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
iOS开发进阶 - 日志输出框架CocoaLumberjack与XcodeColors插件的简单使用(swift版)
04微博,处理程序NSLog问题
iOS开发调试技巧总结(持续更新中)
nslog 宏定义输出 IOS
__VA_ARGS__ 宏和##
C语言中几种输出调试信息的方法
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服