刚学iOS时候,调试找问题的时候一般就两种方式.
1.输出NSLog日志。
2.打断点,一步一步查看问题,查找崩溃点所在的方法,再进一步查看崩溃具体原因,稍微高级一点的就在控制台用命令打印各种参数。
现在看看实在是没什么技术含量,知道我遇到了她-[CocoaLumberjack](https://github.com/CocoaLumberjack/CocoaLumberjack)

先来看看她有什么高级的?

1.简单
CocoaLumberjack集成简单,可以方便的添加进工程,并且DDLog宏与系统的NSLog用法,格式相同,使用简单,不会有难度。
2.快速
在大多数用例中,CocoaLumberjack比NSLog执行快了一个数量级。
3.CocoaLumberjack与Xcode插件XcodeColors 配合,可实现控制台日志的彩色输出。
4.一个日志可以发送到多个logger,可以显示在控制台,可以存储在数据库,本地文件中,还可以上传服务器,满足我们的多样需求。
5.自定义日志。
我们可以根据系统的运行环境,定义不同级别的日志,自定义日志的格式,颜色,存储的日志文件的周期,文件最大个数,文件大小等等。

如何使用 ?

  1. 添加CocoaLumberjack到工程。
  2. 配置你的专属log系统
  3. 替换NSLog,玩转DDLog。

把Lumberjack框架添加到你的项目

CocoaLumberjack包含几个对象分别可以把Log输出到不同的地方: 
1.DDASLLogger -发送日志语句到苹果的日志系统,它们显示在Console.app上 
2.DDTTYLoyger -发送日志到控制台 
3.DDFIleLoger -发送日志到文件。 
4.DDAbstractDatabaseLogger -发送到DB

通过ddLogLevel定义日志等级:

typedef NS_ENUM(NSUInteger, DDLogLevel) {
DDLogLevelOff = 0,
DDLogLevelError = (DDLogFlagError), // 0...00001
DDLogLevelWarning = (DDLogLevelError | DDLogFlagWarning), // 0...00011
DDLogLevelInfo = (DDLogLevelWarning | DDLogFlagInfo), // 0...00111
DDLogLevelDebug = (DDLogLevelInfo | DDLogFlagDebug), // 0...01111
DDLogLevelVerbose = (DDLogLevelDebug | DDLogFlagVerbose), // 0...11111
DDLogLevelAll = NSUIntegerMax // 1111....11111 (DDLogLevelVerbose plus any other flags)
};

相信大家差不多都能看懂,它们是一种包含的枚举。

  • DDLogLevelOff ,关闭所有日志
  • DDLogLevelError,只打印error 级别的日志
  • DDLogLevelWarning ,打印error,warning级别的日志
  • DDLogFlagInfo,打印error,warning,Info级别的日志
  • DDLogLevelDebug,打印error,warning,Info,debug级别的日志
  • DDLogFlagVerbose,打印error,warning,Info,debug,verbose级别的日志
  • DDLogLevelAll,打印所有日志,不知包含上述几种,还有其他级别的日志。

接下来配置我们的专属log系统

  • 自定义日志格式。 
    新建WJFormatter 继承自NSObject,遵循DDLogMatter协议,并实现其协议方法,-(NSString )formatLogMessage:(DDLogMessage )logMess
{
NSString *loglevel = nil;
switch (logMessage.flag)
{
case LOG_FLAG_ERROR:
{
loglevel = @"[ERROR]->";
}
break;
case LOG_FLAG_WARN:
{
loglevel = @"[WARN]-->";
}
break;
case LOG_FLAG_INFO:
{
loglevel = @"[INFO]--->";
}
break;
case LOG_FLAG_DEBUG:
{
loglevel = @"[DEBUG]---->";
}
break;
case LOG_FLAG_VERBOSE:
{
loglevel = @"[VBOSE]----->";
}
break; default:
break;
}
NSString *formatStr = [NSString stringWithFormat:@"%@ %@___line[%ld]__%@", loglevel, logMessage->_function,logMessage->_line, logMessage->_message];
return formatStr;
}
  • 自定义日志发送策略,及各级别日志显示颜色。 
    我的做法是新建一个DDLogManager 单例类来负责管理DDLog的个性化配置。

  • 自定义打印日志级别。 
    同样在DDLogManager里边写一个宏定义。

#if DEBUG
static const DDLogLevel ddLogLevel = DDLogLevelVerbose;
#else
static const DDLogLevel ddLogLevel = DDLogLevelError;
#endif

在DEBUG模式下打印DDLogLevelVerbose级别日志,RELEASE模式下只打印DDLogLevelError级别日志。注意:ddLogLevel名字不要自己定义,否则出错。

/**配置日志信息*/
- (void)config
{
WJLogFormatter *logFormatter = [[WJLogFormatter alloc] init]; //1.发送日志语句到苹果的日志系统,它们显示在Console.app上
// [[DDASLLogger sharedInstance] setLogFormatter:logFormatter];
// [DDLog addLogger:[DDASLLogger sharedInstance]];// //2.把输出日志写到文件中
DDFileLogger *fileLogger = [DDLogManager shareInstence].fileLogger;
[fileLogger setLogFormatter:logFormatter];
[DDLog addLogger:fileLogger withLevel:DDLogLevelError];//错误的写到文件中 //3.初始化DDLog日志输出,在这里,我们仅仅希望在xCode控制台输出
[[DDTTYLogger sharedInstance] setLogFormatter:logFormatter];
[[DDTTYLogger sharedInstance] setColorsEnabled:YES];// 启用颜色区分
[[DDTTYLogger sharedInstance] setForegroundColor:DDMakeColor(255, 0, 0)
backgroundColor:nil
forFlag:DDLogFlagError];
[[DDTTYLogger sharedInstance] setForegroundColor:DDMakeColor(125,200,80)
backgroundColor:nil
forFlag:DDLogFlagInfo];
[[DDTTYLogger sharedInstance] setForegroundColor:DDMakeColor(200,100,200)
backgroundColor:nil
forFlag:DDLogFlagDebug]; [DDLog addLogger:[DDTTYLogger sharedInstance]];// //4.添加数据库输出
// DDAbstractLogger *dateBaseLogger = [[DDAbstractLogger alloc] init];
// [dateBaseLogger setLogFormatter:logFormatter];
// [DDLog addLogger:dateBaseLogger];
}
/**
* 初始化
*
* @return 日志系统管理器对象
*/
+(instancetype)shareInstence
{
static DDLogManager *logmanager = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
logmanager = [[self alloc] init];
});
return logmanager;
} -(instancetype)init
{
self = [super init];
if (self)
{
self.fileLogger = [[DDFileLogger alloc] init];
self.fileLogger.rollingFrequency = 60 * 60 * 24; // 24 hour rolling
self.fileLogger.logFileManager.maximumNumberOfLogFiles = 7;
self.fileLogger.maximumFileSize = 1024 * 1024 * 2;
}
return self;
}
  config方法里边不必不必全写,根据自己的要求添加要用的日志发送策略即可。
另可根据喜好设置不同级别日志的颜色,方便在控制台查找。 DDLog默认的文件管理器,iPhone的话,日志文件是存放在~/Library/Caches/Logs.文件夹中。
log文件命名如 "<bundle identifier> <date> <time>.log"

故我们通过如下方法取日志文件路径。

/*获得系统日志的路径**/
-(NSArray*)getLogPath
{
NSString *docPath = [NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES) objectAtIndex:0];
NSString * logPath = [docPath stringByAppendingPathComponent:@"Caches"];
logPath = [logPath stringByAppendingPathComponent:@"Logs"];
NSFileManager * fileManger = [NSFileManager defaultManager];
NSError * error = nil;
NSArray * fileList = [[NSArray alloc]init];
fileList = [fileManger contentsOfDirectoryAtPath:logPath error:&error];
NSMutableArray * listArray = [[NSMutableArray alloc]init];
for (NSString * oneLogPath in fileList)
{
//带有工程名前缀的路径才是我们存储的日志路径
if([oneLogPath hasPrefix:[NSBundle mainBundle].bundleIdentifier])
{
NSString * truePath = [logPath stringByAppendingPathComponent:oneLogPath];
[listArray addObject:truePath];
}
}
return listArray;
}

-当然这是默认的存储区域,如果自定义一个文件管理器类继承自DDFileManager ,重写存储方法,读取方法相应也要改变。

最后我们就可以用DDLog来替换工程中的NSLog了.

使用不同的宏打印不同级别的Log

  • DDLogError(frmt, …) 打印Error级别的Log
  • DDLogWarn(frmt, …) 打印Warn级别的Log
  • DDLogInfo(frmt, …) 打印Info级别的Log
  • DDLogDebug(frmt, …) 打印Debug级别的Log
  • DDLogVerbose(frmt, …) 打印Verbose级别的Log

到这里控制台彩色日志还没有实现,因为还要用到之前提到的XcodeColors插件.

时间紧急,链接有空再加。 
下面还需一步(见截图): 

“YES”不要写成”Yes”,或其他,否则还是没有效果。

[真机调试的时候可能会收到内存警告,建议连接真机及上线打包时去掉这一项]。 
OK,That’s all. 
实验一把, 

相比NSLog,是不是瞬间有种高大上的感觉。 
事实上也确实是,如果你正在寻找一个app企业级的日志框架,如果你还在为偶尔出现,重复困难的bug烦恼,不妨试试CocoaLumberjack。

扩展阅读:// http://blog.csdn.net/zhonggaorong/article/details/51656169

CocoaLumberjack的更多相关文章

  1. iOS开发之CocoaLumberjack

    Cocoa LumberJack是一个功能强大的NSlog,是通用的Cocoa日志框架之一.它可以提供更高级的log功能,比如记录log至文件或网络,并可根据log的级别(info.debug.war ...

  2. (20160604)开源第三方学习之CocoaLumberjack

    CocoaLumberjack是一个很好用的日志打印工具,它可以帮助我们把工程中的日志信息打印到终端或者输出到文件中. 地址:https://github.com/CocoaLumberjack/Co ...

  3. 【iOS】XcodeColors插件与CocoaLumberjack工具

    工欲善其事必先利其器,好的开发者一定是懂得利用工具来提高自己的效率的,Xcode有很多第三方插件可以使用,最近发现一个可以给控制台着色的工具XcodeColors,结合CocoaLumberjack一 ...

  4. CocoaLumberjack+XcodeColor(输出带有颜色的日志)在安装过程中遇到的问题

    在安装的时候遇到了各种坑,(在这里用到的pch文件的使用以及解决无法引入的问题,可以参考上午的文章) 一(XcodeColor的安装).在github上下载XcodeClolor的插件,并且安装,Xc ...

  5. CocoaLumberjack——带颜色的Log

    CocoaLumberjack可以带颜色Log,具体的好处嘛,谁用谁知道,:] 具体步骤如下: 1. 安装XcodeColors插件 下载地址:https://github.com/robbiehan ...

  6. iOS开源项目之日志框架CocoaLumberjack

    CocoaLumberjack是Mac和iOS上一个集快捷.简单.强大和灵活于一身的日志框架.CocoaLumberjack类似于流行的日志框架(如log4j),但它是专为Objective-C设计的 ...

  7. 【转】CocoaLumberjack——带颜色的Log

    CHENYILONG Blog [转]CocoaLumberjack--带颜色的Log - 趣味苹果开发 - 博客园 转自:趣味苹果开发   CocoaLumberjack--带颜色的Log Coco ...

  8. iOS开发进阶 - 日志输出框架CocoaLumberjack与XcodeColors插件的简单使用(swift版)

    CocoaLumberjack是Mac和iOS上一个集快捷.简单.强大和灵活于一身的日志框架.XcodeColors是用于控制台着色的工具,配合着CocoaLumberjack用有更好的效果,不废话, ...

  9. 利用CocoaLumberjack框架+XcodeColors插件,调试输出有彩色的信息

    效果如下: 步骤: 1. 安装Xcode插件:XcodeColors(方法请参考这里) 2. 为项目添加 CocoaLumberjack 框架(方法请参考这里) 3. 添加代码 (1) 为项目添加 p ...

随机推荐

  1. linux 误删文件恢复

    文档太给力了!误删了几个重要文件,抖抖嗦嗦偷偷恢复了,救了我!!! http://jingyan.baidu.com/article/2f9b480d6c2bcd41cb6cc223.html 注意: ...

  2. 【BZOJ-2342】双倍回文 Manacher + 并查集

    2342: [Shoi2011]双倍回文 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1799  Solved: 671[Submit][Statu ...

  3. 基于spring的文件上传--单文件上传

    Spring配置文件 <bean id="multipartResolver" class="org.springframework.web.multipart.c ...

  4. wpf中textbox与textblock有什么区别

    textbox是windows.form控件,textblock是WPF控件. 功能类似,但后者功能更强,也节省系统资源 wpf是基于directx技术的系统,向后兼容性更好. textblock只用 ...

  5. Python简介及环境部署

    Python的由来:         Python的创始人:Guido van Rossum Guido 在1989年12月时,寻找一门“课余”编程项目来打发圣诞节前后的时间.Guido决定为当时正构 ...

  6. 百度地图学习(II)-Android端的定位

    哎,经历了小编的最近时间的研究,我的百度定位终于成功啦,刹那间觉得自己萌萌哒啦(- ̄▽ ̄)- 话不多说,直接进入正题: 首先,我们来看一下效果: [分析定位原理] [编码分析] 1)处理程序的清单文件 ...

  7. dedecms /install/index.php.bak Installation File Not Deleted && Executed Via Apache Analytic Vul

    catalog . 漏洞描述 . 漏洞触发条件 . 漏洞影响范围 . 漏洞代码分析 . 防御方法 . 攻防思考 1. 漏洞描述 概括梳理一下这个漏洞的成因 . dedecms默认情况下安装完成之后,i ...

  8. shell处理mysql增、删、改、查

    引言     这几天做一个任务,比对两个数据表中的数据,昨天用PHP写了一个版本,但考虑到有的机器没有php或者php没有编译mysql扩展,就无法使用mysql系列的函数,脚本就无效了,今天写个sh ...

  9. [Android]加密技术

    对称加密无论是加密还是解密都使用同一个key,而非对称加密需要两个key(public key和private key).使用public key对数据进行加密,必须使用private key对数据进 ...

  10. python dict.get()和dict['key']的区别

    先看代码: In [1]: a = {'name': 'wang'} In [2]: a.get('age') In [3]: a['age'] --------------------------- ...