CocoaLumberjack
刚学iOS时候,调试找问题的时候一般就两种方式.
1.输出NSLog日志。
2.打断点,一步一步查看问题,查找崩溃点所在的方法,再进一步查看崩溃具体原因,稍微高级一点的就在控制台用命令打印各种参数。
现在看看实在是没什么技术含量,知道我遇到了她-[CocoaLumberjack](https://github.com/CocoaLumberjack/CocoaLumberjack)
先来看看她有什么高级的?
1.简单
CocoaLumberjack集成简单,可以方便的添加进工程,并且DDLog宏与系统的NSLog用法,格式相同,使用简单,不会有难度。
2.快速
在大多数用例中,CocoaLumberjack比NSLog执行快了一个数量级。
3.CocoaLumberjack与Xcode插件XcodeColors 配合,可实现控制台日志的彩色输出。
4.一个日志可以发送到多个logger,可以显示在控制台,可以存储在数据库,本地文件中,还可以上传服务器,满足我们的多样需求。
5.自定义日志。
我们可以根据系统的运行环境,定义不同级别的日志,自定义日志的格式,颜色,存储的日志文件的周期,文件最大个数,文件大小等等。
如何使用 ?
- 添加CocoaLumberjack到工程。
- 配置你的专属log系统
- 替换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的更多相关文章
- iOS开发之CocoaLumberjack
Cocoa LumberJack是一个功能强大的NSlog,是通用的Cocoa日志框架之一.它可以提供更高级的log功能,比如记录log至文件或网络,并可根据log的级别(info.debug.war ...
- (20160604)开源第三方学习之CocoaLumberjack
CocoaLumberjack是一个很好用的日志打印工具,它可以帮助我们把工程中的日志信息打印到终端或者输出到文件中. 地址:https://github.com/CocoaLumberjack/Co ...
- 【iOS】XcodeColors插件与CocoaLumberjack工具
工欲善其事必先利其器,好的开发者一定是懂得利用工具来提高自己的效率的,Xcode有很多第三方插件可以使用,最近发现一个可以给控制台着色的工具XcodeColors,结合CocoaLumberjack一 ...
- CocoaLumberjack+XcodeColor(输出带有颜色的日志)在安装过程中遇到的问题
在安装的时候遇到了各种坑,(在这里用到的pch文件的使用以及解决无法引入的问题,可以参考上午的文章) 一(XcodeColor的安装).在github上下载XcodeClolor的插件,并且安装,Xc ...
- CocoaLumberjack——带颜色的Log
CocoaLumberjack可以带颜色Log,具体的好处嘛,谁用谁知道,:] 具体步骤如下: 1. 安装XcodeColors插件 下载地址:https://github.com/robbiehan ...
- iOS开源项目之日志框架CocoaLumberjack
CocoaLumberjack是Mac和iOS上一个集快捷.简单.强大和灵活于一身的日志框架.CocoaLumberjack类似于流行的日志框架(如log4j),但它是专为Objective-C设计的 ...
- 【转】CocoaLumberjack——带颜色的Log
CHENYILONG Blog [转]CocoaLumberjack--带颜色的Log - 趣味苹果开发 - 博客园 转自:趣味苹果开发 CocoaLumberjack--带颜色的Log Coco ...
- iOS开发进阶 - 日志输出框架CocoaLumberjack与XcodeColors插件的简单使用(swift版)
CocoaLumberjack是Mac和iOS上一个集快捷.简单.强大和灵活于一身的日志框架.XcodeColors是用于控制台着色的工具,配合着CocoaLumberjack用有更好的效果,不废话, ...
- 利用CocoaLumberjack框架+XcodeColors插件,调试输出有彩色的信息
效果如下: 步骤: 1. 安装Xcode插件:XcodeColors(方法请参考这里) 2. 为项目添加 CocoaLumberjack 框架(方法请参考这里) 3. 添加代码 (1) 为项目添加 p ...
随机推荐
- UIScrollView实现图片轮播器及其无限循环效果
图片轮播器: 一.实现效果 实现图片的自动轮播 二.实现代码 storyboard中布局 代码: 1 #import "YYViewController.h" ...
- 基于Token的身份验证——JWT
初次了解JWT,很基础,高手勿喷. 基于Token的身份验证用来替代传统的cookie+session身份验证方法中的session. JWT是啥? JWT就是一个字符串,经过加密处理与校验处理的字符 ...
- 【BZOJ-1260】涂色paint 区间DP
1260: [CQOI2007]涂色paint Time Limit: 30 Sec Memory Limit: 64 MBSubmit: 1147 Solved: 698[Submit][Sta ...
- macOS 安装 wget
适用于macOS Sierra Apple Store下载安装Xcode 安装Homebrew包管理,类似于Ubuntu下的apt-get: 终端下输入 ruby -e "$(curl -f ...
- Oracle数据库查看当前数据库版本的方法
常用的有三种方法: 方法一:v$version SQL> select * from v$version; BANNER ---------------------------------- ...
- 洛谷P1460 健康的荷斯坦奶牛 Healthy Holsteins
题目描述 农民JOHN以拥有世界上最健康的奶牛为傲.他知道每种饲料中所包含的牛所需的最低的维他命量是多少.请你帮助农夫喂养他的牛,以保持它们的健康,使喂给牛的饲料的种数最少. 给出牛所需的最低的维他命 ...
- editGrid分录表格
waf("分录id").wafGrid("setCellEditorAllConfig", "字段名", "filteritem& ...
- Ansible简介
概述 Ansible是一种自动化运维管理工具,无需安装客户端,通过SSH协议与节点通信. 架构 由上图可以看出Ansible由5个部分组成 Ansible:核心 Inventory:定义管理主机的清单 ...
- AngularJs angular.equals
angular.equals 对比两个对象/值是否相等.支持值类型.正则表达式.数组和对象. 如果下列至少有一个是正确的,则将两个对象/值视为相等. 两个对象/值能通过===比较. 两个对象/值是同一 ...
- iOS - 沙盒规范
1.模拟器沙盒目录文件都在个人用户名文件夹下的一个隐藏文件夹里,中文叫资源库,他的目录其实是Library. 因为应用是在沙箱(sandbox)中的,在文件读写权限上受到限制,只能在几个目录下读写文件 ...