CocoaLumberjack的集成和学习

CocoaLumberjack的集成和学习

摘要:

  1. 介绍以及安装
  2. 集成
  3. 使用

介绍以及安装

GitHub地址

强烈建议好好通过Github上的方式安装和使用,github是神器,好好使用,总会飞升。

CocoaLumberjack,简单说就是日志系统。对于我这种原来是java的工程师来说,就是log4j。之所以使用它,是我对于XCode的极大不满!(打印日志居然没有颜色,而且…地方那么小,我有两个屏幕有个毛线用。)吐槽结束,说两句CocoaLumberjack特点。

  1. 有分级。能分级打印的日志才叫日志,才能有选择的看嘛。
  2. 能通过插件配色。全是一个颜色的日志找起来,真的好辛苦
  3. 能自定义日志输出信息。有调用类,调用方法,调用行数的日志才是好的日志

安装

请先通过Github上的介绍安装。~

建议建议: 使用CocoaPods来安装。只需要在Podfile上填上两行

platform :ios, '7.0'
pod 'CocoaLumberjack'

然后终端执行

pod install

就完成了。

ok,ok,ok….这里肯定会有几个坑。简单说一下。

坑:

集成

集成也很简单,仍然是建议大家先通过英文文档。

因为我正在使用的工程还有.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

成果秀

最后放几张配置好的结果图秀

xcode 输出台的日志

文件日志(模拟器可以直接进入文件然后用tail -f 查看)


comments powered by Disqus