有的时候我们想要将程序运行过程中产生的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
,你还需要全局设置下log级别:static const DDLogLevel ddLogLevel = DDLogLevelDebug;
,关于Log级别,下面会细讲。
所以你的.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控制台看到:
产生的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技术交流,查看更多好文章。