修改NSLog的输出格式以及是否输出

NSLog是笔者在iOS开发中,用到的频率最高的函数,不是之一。比起下断点,然后一步一步的跟进调试程序,笔者更喜欢直观的通过NSLog输出一些东西以确定程序的运行行为。以前的时候有研究过怎样在打包提交时一次性清除所以的调试语句(调试总是件花时间的时候事儿,经常有时候写了一条输出,然后忘记注释了,然后可能要不知道哪天突然看到一条输出,然后要找半天才能注释掉),研究最终的结果还是觉得要养成好的习惯,用完的输出要及时注释。十一期间没事儿,突然又想到了这个话题,又研究了一番,发现不但可以一次性的取消所有的调试输出,还可以调整输出内容的格式!要知道原来通过NSLog输出的东西只有最后面冒号后面的东西是有用的。如:

2012-10-21 15:59:29.007 autoArchiveIPA[3718:303] Hello Rainbird

前面的时间,中间的应用名,进程号,再往后面这个不知道是嘛东东的东东,基本没啥用。于是改进了一下变成这样:

AppDelegate.m:18 Hello Rainbird

一下子输出信息就变得有用的多了,我们很容易的知道这条输出语句是AppDelegate.m这个文件的第18行。然后通过“Command+l”,调出“Jump”对话框,很容易快速定位到这条输出语句。

是不是有点儿期待是怎么实现的了呢?其实很简单,打开“工程名-Prefix.pch”文件,在里面的

#ifdef __OBJC__
  #import <Cocoa/Cocoa.h>
#endif

后面添加:

#if DEBUG
#define NSLog(FORMAT, ...) fprintf(stderr,"%s:%d\t%s\n",[[[NSString stringWithUTF8String:__FILE__] lastPathComponent] UTF8String], __LINE__, [[NSString stringWithFormat:FORMAT, ##__VA_ARGS__] UTF8String]);
#else
#define NSLog(FORMAT, ...) nil
#endif

上面怎样控制调试信息的输出已经写的很清楚了,但是我还是觉得养成手动清除调试信息是个好习惯,你觉得呢?

参考资料:
NSLog tips and tricks


相关博文

    分享到:

About rainbird

IOS攻城狮
This entry was posted in IOS开发, object-c, xCode and tagged , , , , , , , , , . Bookmark the permalink.

One Response to 修改NSLog的输出格式以及是否输出

  1. Kam says:

    非常实用的技巧,感谢兄弟分享。我也是NSLog的重度使用者,这样格式化后的NSLog输出非常清晰,便于定位。大赞啊~ :)

发表评论