NSLog的注释及使用重定向;控制台内容写入文件
来源:互联网 发布:网站环境搭建linux 编辑:程序博客网 时间:2024/05/18 03:04
http://my.oschina.net/u/615517/blog/90279
IOS应用发布NSLog的注释及使用重定向
1 选择工程的Target -> Build Settings -> Preprocessor Macros.
如图,默认 Debug项,是“DEBUG=1”.
2 在程序中设置全局宏定义
在程序的 ApplicationName-Prefix.pch 文件中,加入如下,很简单
#ifdef DEBUG_MODE#define DLog( s, ... ) NSLog( @"<%p %@:(%d)> %@", self, [[NSString stringWithUTF8String:__FILE__] lastPathComponent], __LINE__, [NSString stringWithFormat:(s), ##__VA_ARGS__] )#else#define DLog( s, ... )#endif
3 这样就设置好了,测试
在任意ViewController.m中写入
DLog(@
"1234"
);
结果:
2012-07-25 17:09:54.448 xxxx[7094:707] <0x28f790 ViewController.m:(64)> 1234
把控制台内容写入文件
在Objective-c开发程序的时候,有专门的日志操作类NSLog,它将指定的输出,输出到(stderr),我们可以利用Xcode的日志输出窗口,那么既然是要记录到具体日志文件,我们就想输出日志写入到具体的日志文件即可。
代码
1、 宏定义(下面是我在程序中常用到的日志宏,用DEBUG开关管理,
也就是说只有在DEBUG模式下才让日志输出 :)
#ifdef DEBUG # define LOG(fmt, ...) do { \ NSString* file = [[NSString alloc] initWithFormat:@"%s", __FILE__]; \ NSLog((@"%@(%d) " fmt), [file lastPathComponent], __LINE__, ##__VA_ARGS__); \ [file release]; \ } while(0) # define LOG_METHOD NSLog(@"%s", __func__) # define LOG_CMETHOD NSLog(@"%@/%@", NSStringFromClass([self class]), NSStringFromSelector(_cmd)) # define COUNT(p) NSLog(@"%s(%d): count = %d\n", __func__, __LINE__, [p retainCount]); # define LOG_TRACE(x) do {printf x; putchar('\n'); fflush(stdout);} while (0) #else # define LOG(...) # define LOG_METHOD # define LOG_CMETHOD # define COUNT(p) # define LOG_TRACE(x) #endif
可以看到,除了标准的用户定义输出外,我还加入了许多有用的信息,
比如源程序文件位置,行号,类名,函数名等。具体的应用可以在具体的开发过程中添加、删除。
2、 应用:
- (void)redirectNSLogToDocumentFolder{ NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES); NSString *documentsDirectory = [paths objectAtIndex:0]; NSString *fileName =[NSString stringWithFormat:@"%@.log",[NSDate date]]; NSString *logFilePath = [documentsDirectory stringByAppendingPathComponent:fileName]; freopen([logFilePath cStringUsingEncoding:NSASCIIStringEncoding],"a+",stderr); } - (void)applicationDidFinishLaunching:(UIApplication *)application { // 真机测试时保存日志 if ([CDeviceInfo getModelType] != SIMULATOR) { [self redirectNSLogToDocumentFolder]; } }
真机测试的时候,可以利用freopen将标准错误输出保存到指定的文件当中,
这样就可以在问题发生后分析日志文件。
3、 设置DEBUG标志是否正确定义
Xcode 一般会在 debug 运行配置项里面已经定义号了DEBUG 标志,如果没定义我们就自己写上,以我的 Xcode 6.1 为例,在PROJECT--Build Settings中找到 PreProcessor Macros 这个属性,对于 Debug 配置我们给他写上 DEBUG,而在 Release 配置中把它留空。 这样我们刚才那段预处理命令就可以根据这个标志来判断我们编译的时调试版本还是发布版本,从而控制 NSLog 的输出。
0 0
- IOS应用发布NSLog的注释及使用重定向,把控制台内容写入文件
- NSLog的注释及使用重定向;控制台内容写入文件
- 使用cat与重定向进行文件内容的写入与添加
- NSLog的重定向
- ios NSLog内容重定向到本地
- 在iOS中使用重定向,把控制台内容…
- iOS中NSlog重定向到文件
- 重定向 NSLog 输出到文件
- 重定向NSLog
- NSLog重定向
- MFC控制台指令的重定向输出到文件方法
- Scala文件的读取与写入,从控制台输入内容
- Scala文件的读取和写入 从控制台输入内容
- python logging 替代print 输出内容到控制台和重定向到文件
- iOS-重定向nslog输出到文件,邮件反馈
- eclipse控制台输出重定向到文件
- 使用文件重定向
- NSLog直接写入文件的方法
- struts2简单的实例
- Android进阶篇 自定义ActionBar的设计理念
- Linux上Oracle 11g安装步骤
- java分布式事务(JTA)实现 jotm和atomikos
- 一个原生Ajax获取JSON格式数据的例子
- NSLog的注释及使用重定向;控制台内容写入文件
- window.open的用法
- PHP 设计模式 单例模式(Singleton)
- oracle中sql语句的优化(转帖)
- 利用swiper.js 实现 html5 模仿手指滑动切屏效果
- iOS 中的编码方式详解(主要讲解Unicode)
- 一段代码可以让Python直接在Linux/Mac/Unix上运行
- 如何使用 DOI 快速找到论文的全文下载网址
- Android开发DOS命令