demo下载地址:http://download.csdn.net/download/jia12216/8724471
GCDAsyncSocket等第三方开源控件都是采用的CocoaLumberjack日志打印功能。
CocoaLumberjack支持ios日志文件异步记录,日志文件覆盖保存,5级别日志记录,xcode的彩色日志,作者经常维护更新,大部分的日志都基于该架构,但存在使用极为困难的问题。现总结一下使用心得,让你从零做起也能使用CocoaLumberjack日志架构的全部功能。测试环境:xcode6.2
CocoaLumberjack的下载链接是:https://github.com/CocoaLumberjack/CocoaLumberjack
xCode扩展插件XcodeColors下载链接:https://github.com/robbiehanson/XcodeColors
CocoaLumberjack该类型日志系统的原创者,并且不断及时更新,其它的库如Lumberjack都是基于它改编而成,更新困难或根本不更新。
CocoaLumberjack的优点是支持mac工程和iOS功能,提供彩色日志,但是需要用pod install的方式导入类库,支持使用pod命令一键网络下载更新最新库的功能,有后台线程异步存储日志,但存在不懂得pod导入库的人使用极困难和pod倒入得库会修改工程的结构,CocoaLumberjack是稳定的第三方库,基本功能一般不会有太大的变更。本文介绍的是CocoaLumberjack的常规导入方法,若需要更新自己下载下来,自动手工覆盖下文件也很简单。
建议使用CocoaLumberjack,不断完善的库才能更健壮。
DDASLLogger:支持将调试语句写入到苹果的日志中。一般真对Mac开发,可选。就是发往mac控制台的系统日志。
DDTTYLogger:支持将调试语句写入xCode控制台。我们即使要用它。可选。可以支持彩色日志,使用了它便于问题定位,很好用
DDFileLogger:支持将调试语句写入到文件系统。可选。保存日志文件的个数可以指定,超过制定个数就干掉最早的日志(覆盖写日志),日志文件文件最大尺寸可以制定,最大切换文件时间可以指定,当文件超过最大文件尺寸或最大文件切换时间到并且有新的日志文件时就重新建立一个日志文件。日志文件放在类事下面的文件夹下,该文件在iPhone中一般不能直接看到。可以通过修改文件路径和工程参数可以导出日志文件。 /var/mobile/Containers/Data/Application/CECD8580-EEE6-4582-8CC0-79EEEB06146A/Documents/Logs
CocoaLumberjack有很多使用的陷阱,不然不是使用不起来就是部分功能无效:
第一:下载并安装XcodeColors。
第二:引入第三方库CocoaLumberjack。
第三:把下载库文件夹及子文件夹的文件加入工程(CocoaLumberjack-master/Classes),删除CocoaLumberjack.swift(不删除该文件编译不通过)。
第四:编辑工程的scheme,把run中的arguments中增加XcodeColors并设置为YES
第五:在预编头文件-Prefix.pch头文件中增加包含 #import"CocoaLumberjack.h"和定义日志级别。
内容:
#ifdef __OBJC__
#import "CocoaLumberjack.h"
#endif
#ifdef DEBUG
static constDDLogLevel ddLogLevel =DDLogLevelVerbose;
#else
static const DDLogLevel ddLogLevel = DDLogLevelOff;
#endif
第六:在AppDelegate.m或AppDelegate.mm文件中包含Common.h,在- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions函数中增加
[DDLog addLogger:[DDTTYLogger sharedInstance]];
[[DDTTYLogger sharedInstance] setColorsEnabled:YES];
DDFileLogger *fileLogger = [[DDFileLogger alloc] init];
fileLogger.rollingFrequency = 60 * 60 * 24; // 24 hour rolling
fileLogger.logFileManager.maximumNumberOfLogFiles = 7;
[DDLog addLogger:fileLogger];
第七:在需要打印日志的地方增加和NSLOG同样参数的日志:
DDLogError(@"Paper jam%@", @"dsfsd");
DDLogWarn(@"Toner is low");
DDLogInfo(@"Warming up printer (pre-customization)");
DDLogVerbose(@"Intializing protcol x26 (pre-customization)");
第八:定制不同类型的日志显示不同的颜色:
DDLogError(@"Paper jam");
DDLogWarn(@"Toner is low");
#if TARGET_OS_IPHONE
UIColor *pink = [UIColor colorWithRed:(255/255.0) green:(58/255.0) blue:(159/255.0) alpha:1.0];
#else
NSColor *pink = [NSColor colorWithCalibratedRed:(255/255.0) green:(58/255.0) blue:(159/255.0) alpha:1.0];
#endif
[[DDTTYLogger sharedInstance] setForegroundColor:pink backgroundColor:nil forFlag:DDLogFlagInfo];
DDLogInfo(@"Warming up printer (post-customization)");
DDLogDebug(@"DDLogDebug");
#if TARGET_OS_IPHONE
UIColor *gray = [UIColor grayColor];
#else
NSColor *gray = [NSColor grayColor];
#endif
[[DDTTYLogger sharedInstance] setForegroundColor:gray backgroundColor:nil forFlag:DDLogFlagVerbose];
DDLogVerbose(@"Intializing protcol x26 (post-customization)");
CocoaLumberjack本地化增强功能:
第九:对CocoaLumberjack的功能进行扩展增加通过ituns工具对制定应用的日志文件的导出。
把DDFileLogger.m下的- (NSString *)defaultLogsDirectory函数的NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);修改为:NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);来让日志写在app的可以访问的文档目录下。
在targets的build settings中的Info.list File指向的Info.plist文件中增加一列键值 Application supports iTunes file sharing 类型是Boolean值YES.(注意发布正式版本时要把该属性设置为NO。当它的属性变更并且ituns在使用时,要打开关闭ituns后再打开再能保证ituns访问文件的权限和手机应用的权限一致。)这样就可以在手机连接到电脑上,点击iPhone,点应用程序,在文件共享中点击对应的app,点Logs文件夹,点存储到...指定文件夹就可以导出日志文件了,当文件刷新时导致看不到时,通过点击其它应用再点该应用可以重新刷新出Logs文件夹
第十:对CocoaLumberjack缺少打印日志时的文件名和行数的功能进行扩展。
通过修改你的全局头文件(如:Macro.h中的宏定义来实现,不过那样你就要使用新的打印日志函数。代码如下:
#ifndef CLDDLogError #define CLDDLogError(format, ...) \ { \ DDLogError((@"%@.m:%d Err:" format), NSStringFromClass([self class]), __LINE__, ## __VA_ARGS__); \ } #endif #ifndef CLDDLogWarn #define CLDDLogWarn(format, ...) \ { \ DDLogWarn((@"%@.m:%d Warn:" format), NSStringFromClass([self class]), __LINE__, ## __VA_ARGS__); \ } #endif #ifndef CLDDLogInfo #define CLDDLogInfo(format, ...) \ { \ DDLogInfo((@"%@.m:%d Info:" format), NSStringFromClass([self class]), __LINE__, ## __VA_ARGS__); \ } #endif #ifndef CLDDLogDebug #define CLDDLogDebug(format, ...) \ { \ DDLogDebug((@"%@.m:%d Debug:" format), NSStringFromClass([self class]), __LINE__, ## __VA_ARGS__); \ } #endif #ifndef CLDDLogVerbose #define CLDDLogVerbose(format, ...) \ { \ DDLogVerbose((@"%@.m:%d Verbose:" format), NSStringFromClass([self class]), __LINE__, ## __VA_ARGS__); \ } #endif
参考内容:
一、安装xCode扩展插件XcodeColors
1.下载地址:https://github.com/robbiehanson/XcodeColors
点击工程edit scheme,给编译场景中的run->arguments增加环境变量增加XcodeColors变量,值设置为YES。我把FHL-Prefix.pch里的设置为只有调测场景才启动写日志了。
所以你要把编译环境设置为debug模式,当然你想release场景也写日志文件,只需要修改这段代码就可以,至于你想什么级别可以自己指定有效的枚举值。
原代码:
#ifdef DEBUG static constDDLogLevel ddLogLevel =DDLogLevelVerbose; //#else //static const DDLogLevel ddLogLevel = DDLogLevelOff; #endif
若只需要release版本写告警级别的日志,debug级别写所有级别的日志,只需要改为下面代码就可以:#ifdef DEBUG
static constDDLogLevel ddLogLevel =DDLogLevelVerbose;
#else
static const DDLogLevel ddLogLevel = DDLogLevelWarning;
#endif
枚举值
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)
};
2.下载完成后,打开XcodeColors项目,编译即可。它会在你的电脑中安装插XcodeColors.xcplugin。具体路径在:~/Library/Application Support/Developer/Shared/Xcode/Plug-ins/XcodeColors.xcplugin(可以去瞅一眼)。可以把XcodeColors.xcplugin(2015-5-12 日的最新版本)直接拷贝到~/Library/Application Support/Developer/Shared/Xcode/Plug-ins/ 目录下。很多人不知道怎么找到目录。可以点桌面,点上面的菜单中的前往-》我的电脑-》Macintosh HD,然后按照下图找到路径就可以了。
3.退出xCode,重新打开。
4.运行TestXcodeColors项目,尝试,是否安装成功。
二、引入第三方库CocoaLumberjack。
1.下载DDLog。下载地址:https://github.com/CocoaLumberjack/CocoaLumberjack2.将DDLog添加到你的项目中。
unsigned long long const kDDDefaultLogMaxFileSize = 1024 * 1024; // 1 MB
NSTimeInterval const kDDDefaultLogRollingFrequency = 60 * 60 * 24; // 24 Hours
NSUInteger const kDDDefaultLogMaxNumLogFiles = 5; // 5 Files
unsigned long long const kDDDefaultLogFilesDiskQuota = 20 * 1024 * 1024; // 20 MB
char *xcode_colors = getenv(XCODE_COLORS);
if (xcode_colors && (strcmp(xcode_colors, "YES") == 0))
{
// XcodeColors is installed and enabled!
}
把CocoaLumberjack导入工程的文件结构如下图:
文件日志文件导出:
注:
6.3版本需要下载最新的XcodeColors.xcplugin,不然彩色日志显示不出来。
当应用切换到后台时,若没有网络,你的应用10分钟没有网络交互,那么苹果会挂起所有线程(包括异步日志系统的线程),当切换到前台时,可能你写日志时引起崩溃。所以在正式版本最好把写日志的功能用编译宏禁止掉。