CocoaLumberjack的ios应用开发使用指南

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: CocoaLumberjack的ios应用开发使用指南

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,然后按照下图找到路径就可以了。

20150512095801611.png

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分钟没有网络交互,那么苹果会挂起所有线程(包括异步日志系统的线程),当切换到前台时,可能你写日志时引起崩溃。所以在正式版本最好把写日志的功能用编译宏禁止掉。


相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
1月前
|
搜索推荐 数据管理 定位技术
iOS应用开发中有多种主流框架
iOS应用开发中有多种主流框架
161 60
|
1月前
|
Android开发 Swift iOS开发
深入探索iOS与Android操作系统的架构差异及其对应用开发的影响
在当今数字化时代,移动设备已经成为我们日常生活和工作不可或缺的一部分。其中,iOS和Android作为全球最流行的两大移动操作系统,各自拥有独特的系统架构和设计理念。本文将深入探讨iOS与Android的系统架构差异,并分析这些差异如何影响应用开发者的开发策略和用户体验设计。通过对两者的比较,我们可以更好地理解它们各自的优势和局限性,从而为开发者提供有价值的见解,帮助他们在这两个平台上开发出更高效、更符合用户需求的应用。
|
2月前
|
Android开发 Swift iOS开发
iOS和安卓作为主流操作系统,开发者需了解两者差异以提高效率并确保优质用户体验。
【10月更文挑战第1天】随着移动互联网的发展,智能手机成为生活必需品,iOS和安卓作为主流操作系统,各有庞大的用户群。开发者需了解两者差异以提高效率并确保优质用户体验。iOS使用Swift或Objective-C开发,强调简洁直观的设计;安卓则采用Java或Kotlin,注重层次与动画。Swift和Kotlin均有现代编程特性。此外,iOS设备更易优化,而安卓需考虑更多兼容性问题。iOS应用仅能通过App Store发布,审核严格;安卓除Google Play外还可通过第三方市场发布,审核较宽松。开发者应根据需求选择合适平台,提供最佳应用体验。
73 3
|
1月前
|
开发框架 前端开发 Android开发
探索安卓和iOS应用开发中的跨平台解决方案
【10月更文挑战第42天】在移动应用开发的广阔天地中,安卓和iOS系统如同两座巍峨的山峰,分别占据着半壁江山。开发者们在这两座山峰之间穿梭,努力寻找一种既能节省资源又能提高效率的跨平台开发方案。本文将带你走进跨平台开发的世界,探讨各种解决方案的优势与局限,并分享一些实用的代码示例,助你在应用开发的道路上更加游刃有余。
|
1月前
|
Android开发 Swift iOS开发
探索iOS与安卓应用开发的差异性
探索iOS与安卓应用开发的差异性
49 2
|
2月前
|
Java Android开发 Swift
掌握安卓与iOS应用开发:技术比较与选择指南
在移动应用开发领域,谷歌的安卓和苹果的iOS系统无疑是两大巨头。它们不仅塑造了智能手机市场,还影响了开发者的日常决策。本文深入探讨了安卓与iOS平台的技术差异、开发环境及工具、以及市场表现和用户基础。通过对比分析,旨在为开发者提供实用的指导,帮助他们根据项目需求、预算限制和性能要求,做出最合适的平台选择。无论是追求高度定制的用户体验,还是期望快速进入市场,本文都将为您的开发旅程提供有价值的见解。
|
2月前
|
物联网 vr&ar Android开发
掌握安卓与iOS应用开发:核心技术与未来趋势
本文深入探讨了安卓和iOS应用开发的核心技术,包括开发环境、主要编程语言、常用框架以及性能优化技巧。同时,文章还展望了两大平台未来的发展趋势,如人工智能、增强现实和物联网的集成,为开发者提供全面的技术参考和发展指引。
|
2月前
|
安全 Android开发 iOS开发
深入解析:安卓与iOS的系统架构及其对应用开发的影响
本文旨在探讨安卓与iOS两大主流操作系统的架构差异,并分析这些差异如何影响应用开发的策略和实践。通过对比两者的设计哲学、安全机制、开发环境及性能优化等方面,本文揭示了各自的特点和优势,为开发者在选择平台和制定开发计划时提供参考依据。
66 4
|
1月前
|
开发工具 Android开发 Swift
探索iOS与安卓应用开发的异同点
【10月更文挑战第24天】本文通过比较iOS和安卓开发环境,旨在揭示两大移动平台在开发过程中的相似性与差异性。我们将探讨开发工具、编程语言、用户界面设计、性能优化及市场分布等方面,以期为开发者提供全面的视角。通过深入浅出的分析,文章将帮助读者更好地理解每个平台的独特之处及其对应用开发的影响。
|
3月前
|
开发工具 Android开发 iOS开发
掌握安卓与iOS应用开发:关键技术与未来展望
本文深入探讨了安卓和iOS平台下的应用开发技术,重点比较了两大平台的架构、开发工具和市场策略。通过分析最新的技术趋势和开发者社区的反馈,文章为读者提供了一个全面的对比视角,旨在帮助开发者做出更明智的平台选择和开发决策。
下一篇
DataWorks