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 ...
随机推荐
- python3下的paramiko 安装
环境为centos6.7 python3为源码编译安装的,系统自带的python2 可以直接使用paramiko模块,但是在py3的环境下加载出错,所有需要安装新的paramiko 模块: 上了par ...
- Mysql将近两个月的记录合并为一行显示
最近做报表统计,用到要求把近两个月的绩效作比较,并作出一些环比数据等. 场景:将1班同学的两个月的语文的平均成绩合并到一行比较. CREATE TABLE `Chinese_score` ( `id` ...
- 【bzoj1922】 Sdoi2010—大陆争霸
http://www.lydsy.com/JudgeOnline/problem.php?id=1922 (题目链接) 题意 一张无向图,每个节点被k个节点保护,想要走到一个节点当且仅当它不被保护.你 ...
- C#的图像处理方法--(作者:http://conner-wang.spaces.live.com转载)
使用C#进行图像处理的几种方法 本文讨论了C#图像处理中Bitmap类.BitmapData类和unsafe代码的使用以及字节对齐问题. Bitmap类 命名空间:System.Drawing 封装 ...
- jquery的$
<!DOCTYPE HTML> <HTML> <head> <title>aa</title> <script type=" ...
- iOS应用第三方推送的添加
现在的一些第三方的推送平台挺好用,主要是因为他们有类似微信公众平台一样的管理后台,简单易用,封装了很多开发者需要的推送功能. 下面以个推为例: 1.在个推的应用配置iOS部分设置自己的BounleID ...
- python 集合、函数和文件操作
1.set集合 set集合是一个无序.不可重复.可嵌套的序列,基本功能是进行成员关系测试和删除重复元素,可以使用大括号({})或者 set()函数创建集合,注意:创建一个空集合必须用 set() 而不 ...
- [Android] View.setTag(key,Object) (java.lang.IllegalArgumentException: The key must be an application-specific resource id.)
转自: http://blog.csdn.net/brokge/article/details/8536906 setTag是android的view类中很有用的一个方法,可以用它来给空间附加一些信息 ...
- Notepad++ 开启「切分窗口」同时检视、比对两份文件
Notepad++ 是个相当好用的免费纯文本编辑器,除了内建的功能相当多之外,也支持外挂模块的方式扩充各方面的应用.以前我都用 UltraEdit 跟 Emeditor,后来都改用免费的 Notepa ...
- python和numpy的版本、安装位置
命令行下查看python和numpy的版本和安装位置 1.查看python版本 方法一: python -V 注意:‘-V‘中‘V’为大写字母,只有一个‘-’ 方法二: python --versio ...