CocoaLumberjack:简单好用的Log库

有的时候我们想要将程序运行过程中产生的Log保存起来或者发送到自己服务器,为了以后方便分析。这时候就可以用CocoaLumberjack啦。

CocoaLumberjack是一个可以在iOS和Mac开发中使用的日志库,强大又不失灵活。集成进项目后,配置下,然后用DDLog语句简单地取代NSLog语句( DDLog的使用方法和NSLog一样)就可以啦,是不是很方便。

安装

第一种方法:使用cocoapods,不会使用cocoapods的可以看这篇教程,Podfile看起来是这样的:

platform:ios, '7.0'
target 'CocoaLumberjackDemo' do
pod 'CocoaLumberjack'
end

第二种方法:使用Carthage,Cartfile:

github "CocoaLumberjack/CocoaLumberjack"

第三种方法:手工导入,具体可以看他的文档

使用

CocoaLumberjack自带了几种Log方式:

1.DDLog(整个框架的基础)
2.DDASLLogger(发送日志语句到苹果的日志系统,以便它们显示在Console.app上)
3.DDTTYLoyger(发送日志语句到Xcode控制台)
4.DDFIleLoger(把日志写入本地文件)

你可以同时记录文件和控制台,还可以创建自己的logger,将日志语句发送到网络或者数据库中。

使用的时候需要引入头文件:#import <CocoaLumberjack/CocoaLumberjack.h>,你还需要全局设置下log级别:static const DDLogLevel ddLogLevel = DDLogLevelDebug;,关于Log级别,下面会细讲。

所以你的.pch里面可能有段这样的代码:

PrefixHeader.pch

然后加入代码:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    // 添加DDASLLogger,你的日志语句将被发送到Xcode控制台
    [DDLog addLogger:[DDTTYLogger sharedInstance]];
    
    // 添加DDTTYLogger,你的日志语句将被发送到Console.app
    [DDLog addLogger:[DDASLLogger sharedInstance]];
    
    // 添加DDFileLogger,你的日志语句将写入到一个文件中,默认路径在沙盒的Library/Caches/Logs/目录下,文件名为bundleid+空格+日期.log。
    DDFileLogger *fileLogger = [[DDFileLogger alloc] init];
    fileLogger.rollingFrequency = 60 * 60 * 24;
    fileLogger.logFileManager.maximumNumberOfLogFiles = 7;
    [DDLog addLogger:fileLogger];
    
    //产生Log
    DDLogVerbose(@"Verbose");
    DDLogDebug(@"Debug");
    DDLogInfo(@"Info");
    DDLogWarn(@"Warn");
    DDLogError(@"Error");
    
    return YES;
}

DDLog和NSLog的语法是一样的。

运行程序,可以在Xocde控制台看到:


Xcode日志

产生的Log文件打开是这样的:


Log文件

Log级别

接下来,你就要考虑用哪种级别了,CocoaLumberjack有5种:

typedef NS_OPTIONS(NSUInteger, DDLogFlag){
    DDLogFlagError      = (1 << 0),
    DDLogFlagWarning    = (1 << 1),
    DDLogFlagInfo       = (1 << 2),
    DDLogFlagDebug      = (1 << 3),
    DDLogFlagVerbose    = (1 << 4)
};

Log Level 用来过滤每条Log:

typedef NS_ENUM(NSUInteger, DDLogLevel){
    DDLogLevelOff       = 0,
    DDLogLevelError     = (DDLogFlagError),
    DDLogLevelWarning   = (DDLogLevelError   | DDLogFlagWarning),
    DDLogLevelInfo      = (DDLogLevelWarning | DDLogFlagInfo),
    DDLogLevelDebug     = (DDLogLevelInfo    | DDLogFlagDebug),
    DDLogLevelVerbose   = (DDLogLevelDebug   | DDLogFlagVerbose),
    DDLogLevelAll       = NSUIntegerMax
};

例如,如果您将日志级别设置为 LOG_LEVEL_INFO,那么你会看到error、Warn和Info语句。

你也可以自定义Log级别或者每个级别的名字或者在单纯的级别上增加一些高级用法

我们也可以为Debug和Release模式设置不同的Log级别:

#ifdef DEBUG 
static const DDLogLevel ddLogLevel = DDLogLevelVerbose;
#else 
static const DDLogLevel ddLogLevel = DDLogLevelWarning;
#endif

我们还可以为每种loger设置不同的级别:

[DDLog addLogger:[DDASLLogger sharedInstance] withLevel:DDLogLevelInfo];
[DDLog addLogger:[DDTTYLogger sharedInstance] withLevel:DDLogLevelDebug];

我们还可以自定义日志的formatter格式
首先自定义一个 LogFormatter, 遵从 DDLogFormatter 协议,我们需要重写 - (NSString *)formatLogMessage:(DDLogMessage *)logMessage 这个方法,这个方法的输入参数是由 logger 发的一个 DDLogMessage 对象,包含了一些必要的信息,返回值就是最终 log 的消息体字符串。

我们还可以自定义Logger,实现我们自己想要的处理,具体可以看他的文档。

更多详细文档可以点这里

欢迎关注 和我的专题:iOS技术交流,查看更多好文章。

推荐阅读更多精彩内容