iOS开发之CocoaLumberjack
Cocoa LumberJack是一个功能强大的NSlog,是通用的Cocoa日志框架之一。它可以提供更高级的log功能,比如记录log至文件或网络,并可根据log的级别(info、debug、warn、error)进行筛选。众所周知,NSlog虽然功能强大,但却普遍存在不支持分级别log、仅支持本地打印的问题,而且在大量处理log时,会降低程序运行效率。而Cocoa LumberJack则不存在这样的制约。源码地址在: https://github.com/robbiehanson/CocoaLumberjack/wiki/GettingStarted,下面介绍如何使用:
- 把框架添加到你的应用程序
主要添加的文件有以下四个
@ DDLog(基础框架)
@ DDASLLogger(发送到苹果的日志系统,他们显示到控制台上),个人建议没有必要
@DDTTYLoyger (发送日志语句到控制台)
@DDFIleLoger (把输出信息写进文件中)
DDLog是强制性的,其余的都是可选的,这取决于你如何打算使用这个框架,如果你不打算纪录到一个文件,你可以跳过DDFileLogger,或者你想跳过ASl 在你的爱好快速纪录日志,你可以跳过DDASLLoger
- 配置框架
第一件事情你要做的是在你applicationDidFinishLaunching方法中配置(通常是这么做)添加你所需要的文件
下面几行代码是在开始的时候所需要的
[DDLog addLogger:[DDASLLogger sharedInstance]];
[DDLog addLogger:[DDTTYLogger sharedInstance]];
fileLogger = [[DDFileLogger alloc] init];
fileLogger.rollingFrequency = 60 * 60 * 24;
// 24 hour rolling
fileLogger.logFileManager.maximumNumberOfLogFiles = 7;
[DDLog addLogger:fileLogger];
上面两行代码添加了一对logging框架,换句话说,你的日志语句已经能够发送到控制台,(就像一个正常的NSLog)
这个框架的好处之一就是它的灵活性,如果你还想要你的日志语句写入到一个文件中,你可以添加和配置fileLogger
- 用Lumberjack输入代替你的NSLog输出
DDLog的头文件定义了宏,您将使用来取代你的NSLog语句。你可以参考下面的语句来代替你的NSlog
// Convert from this:
NSLog(@"Broken sprocket detected!");
NSLog(@"User selected file:%@ withSize:%u", filePath, fileSize); // To this:
DDLogError(@"Broken sprocket detected!");
DDLogVerbose(@"User selected file:%@ withSize:%u", filePath, fileSize);
我们看到DDLog和NSLog有这完全相同的语法,在使用的时候不会有人和的障碍。
DDLog默认有四种级别的日志,你所要做的就是决定使用那种日志级别来打印你的日志语句,它们分别是:
@DDlogError
@DDlogWarn
@DDlogInfo
@DDlogVerbose
注释:你也可以自定义级别,你可以添加上更细微的控制代替系统四个简单的等级。
当然你选择那个NSLog语句,这取决于你的消息的严重程度。
下面的这些不同的日志等级也许正有你所需要的
如果你设置的日志级别为 LOG_LEVEL_ERROR那么你只会看到DDlogError语句的输出。
如果你将日志的级别设置为LOG_LEVEL_WARN那么你只会看到DDLogError和DDLogWarn语句。
如果您将日志级别设置为 LOG_LEVEL_INFO,您将看到error、Warn和信息报表。
如果您将日志级别设置为LOG_LEVEL_VERBOSE,您将看到所有DDLog语句。
如果您将日志级别设置为 LOG_LEVEL_OFF,你不会看到任何DDLog语句。
那么我在哪里设置日志级别?我必须使用一个日志级别为我的整个项目吗?
当然不是,我们都知道它就像调试或者添加新的特性,你想详细纪录你目前正在调试的部分,这个框架提供了对每个文件的调试,所以你可以修改日志级别在你正在编辑的文件中。
注释:(当然还有许多其他高级选项,比如全球日志级别,每xcode配置水平,每记录器级别等。但是我们会去,在另一篇文章)。
下面是详细的如何在你的代码中运用这个框架
// CONVERT FROM THIS #import "Sprocket.h" @implementation Sprocket - (void)someMethod
{
NSLog(@"Meet George Jetson");
} @end // TO THIS #import "Sprocket.h"
#import "DDLog.h" static const int ddLogLevel = LOG_LEVEL_VERBOSE; @implementation Sprocket - (void)someMethod
{
DDLogVerbose(@"Meet George Jetson");
} @end
注意日志级别声明为常数,这意味着DDLog以上声明的日志级别将被认为默认值,编译到你的项目中。(当你的编译器优化打开的时候,那就是你的发布版本)
----文章完----
最后,推荐一个神器
个人觉得比TestFlight更简单好用,开发者只需要简单把打好的ipa包上传上去,生成二维码,测试人员在手机上扫码二维码,就可以直接安装最新的测试版本了,好用的让人想哭。
目前需要邀请码注册,我这里有几枚邀请码,需要的私信我邮箱,或者自己去申请邀请码。
iOS开发之CocoaLumberjack的更多相关文章
- iOS开发之Socket通信实战--Request请求数据包编码模块
实际上在iOS很多应用开发中,大部分用的网络通信都是http/https协议,除非有特殊的需求会用到Socket网络协议进行网络数 据传输,这时候在iOS客户端就需要很好的第三方CocoaAsyncS ...
- iOS开发之UISearchBar初探
iOS开发之UISearchBar初探 UISearchBar也是iOS开发常用控件之一,点进去看看里面的属性barStyle.text.placeholder等等.但是这些属性显然不足矣满足我们的开 ...
- iOS开发之UIImage等比缩放
iOS开发之UIImage等比缩放 评论功能真不错 评论开通后,果然有很多人吐槽.谢谢大家的支持和关爱,如果有做的不到的地方,还请海涵.毕竟我一个人的力量是有限的,我会尽自己最大的努力大家准备一些干货 ...
- iOS开发之 Xcode6 添加xib文件,去掉storyboard的hello world应用
iOS开发之 Xcode6.1创建仅xib文件,无storyboard的hello world应用 由于Xcode6之后,默认创建storyboard而非xib文件,而作为初学,了解xib的加载原理 ...
- iOS开发之loadView、viewDidLoad及viewDidUnload的关系
iOS开发之loadView.viewDidLoad及viewDidUnload的关系 iOS开发之loadView.viewDidLoad及viewDidUnload的关系 标题中所说的3个方 ...
- iOS开发之info.pist文件和.pch文件
iOS开发之info.pist文件和.pch文件 如果你是iOS开发初学者,不用过多的关注项目中各个文件的作用.因为iOS开发的学习路线起点不在这里,这些文件只会给你学习带来困扰. 打开一个项目,我们 ...
- iOS开发之WKWebView简单使用
iOS开发之WKWebView简单使用 iOS开发之 WKWebVeiw使用 想用UIWebVeiw做的,但是突然想起来在iOS8中出了一个新的WKWebView,算是UIWebVeiw的升级版. ...
- iOS 开发之Block
iOS 开发之Block 一:什么是Block.Block的作用 UI开发和网络常见功能的实现回调,按钮事件的处理方法是回调方法. 1. 按钮事件 target action 机制. 它是将一 ...
- iOS开发之Xcode常用调试技巧总结
转载自:iOS开发之Xcode常用调试技巧总结 最近在面试,面试过程中问到了一些Xcode常用的调试技巧问题.平常开发过程中用的还挺顺手的,但你要突然让我说,确实一脸懵逼.Debug的技巧很多,比如最 ...
随机推荐
- SSAS动态添加分区(一)
一.动态分区的好处就不说了,随着时间的推移,不可能一个度量值组都放在一个分区中,处理速度非常慢,如何动态添加分区,如何动态处理分区,成为了很多新手BI工程师一个头痛的问题,废话不多说,分享一下我的经验 ...
- 【转】PHP curl CURLOPT_HTTPHEADER设置HOST
为了安全,我们的web服务主机往往不能上网.维护的时候,也是通过跳板机,ssh登录后去操作. 有时候我们的程序需要访问外网.比如需要调用外网其他程序的某个接口.这下该怎么办呢? 我们可以通过PHP的C ...
- ASP.NET Core--授权过滤器
翻译如下: 目前,我们正在从事这方面工作. 我们欢迎您的加入,以帮助塑造范围和方法.您可以跟踪状态并在此提供的输入问题在GitHub上. 如果你想查看初稿并在此主题的大纲,请留下注意到在您的联系信息的 ...
- 我对Jenkins的认识
参考: http://www.cnblogs.com/sunzhenchao/archive/2013/01/30/2883289.html
- sscanf提取字符串中的数据php
1.需求 理解sscanf的作用 2.例子 $str = "age:30 weight:60kg"; sscanf($str,"age:%d weight:%dkg&qu ...
- spring jpa 实体互相引用返回restful数据循环引用报错的问题
spring jpa 实体互相引用返回restful数据循环引用报错的问题 Java实体里两个对象有关联关系,互相引用,比如,在一对多的关联关系里 Problem对象,引用了标签列表ProblemLa ...
- php5.2.3连接sqlserver2008
1,下载驱动 下载地址:https://www.microsoft.com/en-us/download/details.aspx?id=20098 我下载的是:SQLSRV20.EXE ,因为我的p ...
- yii2.0 框架邮件的发送
第一步: 在main-local.php中的components中配置mailer: $config = [ 'components' => [ 'mailer' => [ 'class' ...
- 基于hk2框架的功能测试Mock注入
public Object getInstance(Class<?> clz){ return IocBean.get(clz.getName()); } public Object Mo ...
- 疑问:line-height对非文字行内块的影响
line-height:对子元素是非文字的行内块,表现出来的不是垂直居中.目前还不知道具体细节. 可以看出来两个东西不在一行.老师的解释是line-height对非文字元素解释不一样,但是我没懂细节. ...