CocoaLumberjack的集成和学习
Jan 9, 2016 · 2 minute read · Comments开发
CocoaLumberjack的集成和学习
摘要:
- 介绍以及安装
- 集成
- 使用
介绍以及安装
强烈建议好好通过Github上的方式安装和使用,github是神器,好好使用,总会飞升。
CocoaLumberjack,简单说就是日志系统。对于我这种原来是java的工程师来说,就是log4j。之所以使用它,是我对于XCode的极大不满!(打印日志居然没有颜色,而且…地方那么小,我有两个屏幕有个毛线用。)吐槽结束,说两句CocoaLumberjack特点。
- 有分级。能分级打印的日志才叫日志,才能有选择的看嘛。
- 能通过插件配色。全是一个颜色的日志找起来,真的好辛苦
- 能自定义日志输出信息。有调用类,调用方法,调用行数的日志才是好的日志
安装
请先通过Github上的介绍安装。~
建议建议: 使用CocoaPods来安装。只需要在Podfile
上填上两行
platform :ios, '7.0'
pod 'CocoaLumberjack'
然后终端执行
pod install
就完成了。
…
…
ok,ok,ok….这里肯定会有几个坑。简单说一下。
坑:
- 请在翻墙的环境下安装。相信我,如果没有翻墙环境,你总会陷入莫名的长时间等待。
- 安装过程中,一旦出现以下情况。说明安装并没有成功配置。原因是原来的项目由于各种原因,导致管理的包路径,源路径很有问题,需要根据上述提示进行更改。(这里会经常出问题,都是因为大家习惯了直接将问题放到google或者stackoverflow找寻答案,本人不建议如此做,先看日志输出,搞清楚到底啥问题才是最重要的),接下来截图是我的修改,本质上就是按照提示进行更改。
- CocoaPods本身对源码入侵是比较严重的,所以大家也可以使用Carthage。
集成
集成也很简单,仍然是建议大家先通过英文文档。
因为我正在使用的工程还有.pch
预加载头文件的存在,所以我仍然是在这里配置了我的输入和输出等级。
#ifdef DEBUG
static const DDLogLevel ddLogLevel = DDLogLevelDebug;
#else
static const DDLogLevel ddLogLevel = DDLogLevelError;
#endif
当然,这种方式正在被淘汰,建议大家可以写到一个宏来配置。
然后在AppDelegate
中的didFinishLaunchingWithOptions
中初始化。
#import <CocoaLumberjack/CocoaLumberjack.h>
...
...
...
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
[DDLog addLogger:[DDTTYLogger sharedInstance]];
[DDLog addLogger:[DDASLLogger sharedInstance]];
[[DDTTYLogger sharedInstance] setLogFormatter:[LDFormatter new]];
// And we also enable colors
[[DDTTYLogger sharedInstance] setColorsEnabled:YES];
DDFileLogger *fileLogger = [[DDFileLogger alloc] init]; // File Logger
fileLogger.rollingFrequency = 60 * 60 * 24; // 24 hour rolling
fileLogger.logFileManager.maximumNumberOfLogFiles = 7;
[DDLog addLogger:fileLogger];
}
完成初始化后,就可以在想要的敌方直接打印结果了。
DDLogVerbose(@"Verbose");
DDLogDebug(@"Debug");
DDLogInfo(@"Info");
DDLogWarn(@"Warn");
DDLogError(@"Error");
使用
其实到上面为止,使用也已经是说完了。但对于工程来说,打印日志,只有日志信息是不够的。CocoaLumberjack对此做了非常好的优化,只需要简单地配置就基本可以打印出一个较为理想的日志输出。(也就是我开始讲的第3条)
配置自定义的Formatter
配置之前,可以先给大家看一下,CocoaLumberjack的日志到底包含了多少信息,有多强大。
@interface DDLogMessage : NSObject <NSCopying>
{
// Direct accessors to be used only for performance
@public
NSString *_message;
DDLogLevel _level;
DDLogFlag _flag;
NSInteger _context;
NSString *_file;
NSString *_fileName;
NSString *_function;
NSUInteger _line;
id _tag;
DDLogMessageOptions _options;
NSDate *_timestamp;
NSString *_threadID;
NSString *_threadName;
NSString *_queueLabel;
}
可以看到,无论是类(_fileName
),还是函数名(_function
),还有所在的行数(_line
),还有时间,所在线程等等等等,都有。
接下来就可以自定义Formatter了。
建议大家还是先看Github项目中的自定义Formatter文档
MyFormatter.h
@interface MyFormatter : NSObject <DDLogFormatter> {
int loggerCount;
NSDateFormatter *threadUnsafeDateFormatter;
}
@end
=======
MyFormatter.m
@implementation MyFormatter
- (NSString *)formatLogMessage:(DDLogMessage *)logMessage {
NSString *logLevel;
switch (logMessage->_flag) {
case DDLogFlagError : logLevel = @"Error"; break;
case DDLogFlagWarning : logLevel = @"W"; break;
case DDLogFlagInfo : logLevel = @"Info"; break;
case DDLogFlagDebug : logLevel = @"D"; break;
default : logLevel = @"V"; break;
}
NSString *dateAndTime = [threadUnsafeDateFormatter stringFromDate:(logMessage->_timestamp)];
NSString *logMsg = logMessage->_message;
NSString *logFileNmae = logMessage -> _fileName;
NSString *logFuncation = logMessage -> _function;
long lineNum = logMessage -> _line;
return [NSString stringWithFormat:@"%@ %@ :%li %@ %@ :::\n %@ ",logFileNmae, logFuncation,lineNum, logLevel, dateAndTime, logMsg];
}
@end
成果秀
最后放几张配置好的结果图秀