相关描述:
1、CocoaLumberjack是什么?
2、为什么要用CocoaLumberjack?
3、CocoaLumberjack怎么用?
对于问题一,
CocoaLumberjack是Mac和iOS上一个集快捷、简单、强大、灵活于一身的日志框架。类似于流行的日志框架(如log4),但它是为Objective-C设计的,利用了多线程、CGD(如果可用)、原子锁操作Objective-C运行时的特性。
问题二,
快速:
CocoaLumberjack比NSLog快了一个数量级
简单:当应用程序启动时,只需一行加单的代码就可配置Lumberjack。然后用DDLog语句简单地取代NSLog语句。 并且DDLog宏与NSLog的有完全相同的格式和语法,所以超级简单。
强大:
一个日志语句可以被发送到多个logger,意味着你可以同时记录文件和控制台。此外,还可以创建自己的logger,将日志语句发送到网络、数据库或者分布式文件系统中。没有任何限制。
灵活性:
配置你自己想要的日志框架。修改每个文件的日志级别(尤其是测试时)。修改每个logger的日志级 别(详细的控制台,但是简洁的日志文件)。修改每个Xcode配置的日志级别。为你的应用程序定制日志级别的数量。添加自己的精细的日志。在运行时动态修 改日志级别。 选择如何以及何时回滚你的日志文件。将日志文件上传至中心服务器。压缩存档日志文件来节省硬盘空间。
总结来说为什么我们要使用LumberJack,在什么情况下需要使用它呢?
1.你想找到一种方式来跟踪在程序中不断出现的不可复制的bug;
2.你对iPhone上的简短日志感到很失望;
3.出于支持系统和稳定性的需要,你想将应用程序升级到下一级别;
4.为你的应用程序(Mac或者iPhone)寻找企业级的日志解决方案。
接着我们简单介绍一下这个工具的相关组件:
CocoaLumberjack是由DDASLLogger
、DDTTYLogger
和DDFileLogger
三个Log组件组成,各自的功能描述如下:
- DDASLLogger:支持将调试语句写入到苹果的日志中。一般正对Mac开发。。
- DDTTYLogger:支持将调试语句写入xCode控制台。在iOS开发中使用。
- DDFileLogger:支持将调试语句写入到文件系统。
日志的级别有如下几种:
- LOG_LEVEL_ERROR:如果设置为LOG_LEVEL_ERROR,仅仅能看到Error相关的日志输出。
- LOG_LEVEL_WARN:如果设置为LOG_LEVEL_WARN,能看到Error、Warn相关的日志输出。
- LOG_LEVEL_INFO:如果设置为LOG_LEVEL_INFO,能够看到Error、Warn、Info相关的日志输出。
- LOG_LEVEL_DEBUG:如果设置为LOG_LEVEL_DEBUG,能够看到Error/Warn/Info/Debug相关的日志输出。
- LOG_LEVEL_VERBOSE:如果设置为LOG_FLAG_VERBOSE,能够看到所有级别的日志输出。
- LOG_LEVEL_OFF:不输出日志。
下面介绍一下结合XcodeColor如何使用这个工具
1、如果你的Xcode已经安装了Cocoapods,在Podfile中添加“pod ‘CocoaLumberjack‘”(外面双引号除外),然后执行pod update 指令
2、创建一个common.h头文件,里面配置日志记录级别:
3、下载安装XcodeColor插件,然后Command+B
编译项目可以自动将插件安装至~/Library/Application Support/Developer/Shared/Xcode/Plug-ins/XcodeColors.xcplugin
路径下。彻底退出Xcode,重新启动Xcode。再次打开XcodeColors.xcodeproj
运行TestXcodeColors
的target,测试插件是否安装成功。
说明:可能在Xcode中无法正常显示颜色,需要配置Xcode的环境变量,设置“Edit Scheme”-> “Run” –> “Arguments”(Environment Variabl)环境变量,添加一个叫做XcodeColors
并且设置值为YES
,如下图所示。
4、设置LogFormatter
我们可以定制自己的Log的方式。通过创建一个类实现DDLogFormatter
协议的方法- (NSString *)formatLogMessage:(DDLogMessage *)logMessage;
,如下创建一个MyLogFormatter
类,并实现如下方法:
- (NSString *)formatLogMessage:(DDLogMessage *)logMessage{
NSString *logLevel = nil;
switch (logMessage->logFlag)
{
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;
default:
logLevel = @"[VBOSE] > ";
break;
}
NSString *formatStr = [NSString stringWithFormat:@"%@[%@ %s][line %d] %@",
logLevel, logMessage.fileName, logMessage->function,
logMessage->lineNumber, logMessage->logMsg];
return formatStr;
}
实例化:
/set formatter
MyLogFormatter *formatter = [[MyLogFormatter alloc] init];
//添加输出到Xcode控制台
[[DDTTYLogger sharedInstance] setLogFormatter:formatter];
[DDLog addLogger:[DDTTYLogger sharedInstance]];
最后在相关地方进行测试即可:
DDLogInfo(@"DDLogInfo");
DDLogError(@"DDLogError");
DDLogWarn(@"DDLogWarn");
DDLogDebug(@"DDLogDebug");
DDLogVerbose(@"DDLogVerbose");
输出效果图;
相关补记:
* 由于Xcode6后就创建工程就不再自动创建.pch文件了,所以这里我们必须手动自己创建它,相关方法:创建.pch文件到Xcode6,其中$(SRCROOT)就是该工程的相对路径
*在创建common.h文件的时候,在该文件中导入pods第三方库的头文件,会提示错误“not found file ***”,经过网上查找,找到解决方法:
设置 Project->Info->Configurations之后 clear ,然后再编译
在Configurations里面吧Debug 和Release的Tests 的None改为pods
参考链接:
https://github.com/CocoaLumberjack/CocoaLumberjack
http://git.devzeng.com/blog/using-logging-tools-in-ios.html
http://mobile.51cto.com/hot-436334.htm
http://www.cnblogs.com/liufan9/p/3552832.html