iOS调试技巧之Log

本文介绍了在iOS开发中,如何利用CocoaLumberjack库来解决NSLog的局限,如无法记录到文件、不支持分级日志以及效率问题。通过设置LOG_LEVEL_DEF宏、安装CocoaLumberjack、自定义HHLogFormatter以及利用XcodeColors插件实现不同级别的日志颜色显示,提升调试体验和效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

iOS调试技巧之Log

欢迎加QQ群讨论:157672725
博客地址:http://catchzeng.leanote.com/

为什么我的程序比别人耗内存、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

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

效果:

这里写图片描述

实现:

1.pod安装CocoaLumberjack

pod 'CocoaLumberjack'

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
#ifndef PrefixHeader_pch
#define PrefixHeader_pch

#import <UIKit/UIKit.h>
#import <Foundation/Foundation.h>
#import "HHProfile.h"
#import "CocoaLumberjack.h"

#endif

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];

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

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

Demo地址: https://github.com/catchZeng/HHLog

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值