在iOS中使用重定向,把控制台内容…
来源:互联网 发布:批处理图片的软件 编辑:程序博客网 时间:2024/05/22 01:33
转自:http://mmz06.blog.163.com/blog/static/121416962011111210462288
引入
在做j2ee开发的时候,会用到log4j或其它类似工具去记录程序运行日志,以便调试时或在程序运行出错后,通过日志查询出错原因。那在IOS开发中是否有类似的方式来记录日志呢?下面将简单的说明:
说明
在Objective-c开发程序的时候,有专门的日志操作类NSLog,它将指定的输出,输出到(stderr),我们可以利用Xcode的日志输出窗口,那么既然是要记录到具体日志文件,我们就想输出日志写入到具体的日志文件即可。
代码
1、 宏定义(下面是我在程序中常用到的日志宏,用DEBUG开关管理,
也就是说只有在DEBUG模式下才让日志输出 :)
#ifdef DEBUG
# define LOG(fmt, ...) do{ \
NSString* file = [[NSString alloc]initWithFormat:@"%s", __FILE__];\
NSLog((@"%@(%d) " fmt), [filelastPathComponent], __LINE__, ##__VA_ARGS__);\
[filerelease]; \
}while(0)
# define LOG_METHODNSLog(@"%s",__func__)
# define LOG_CMETHODNSLog(@"%@/%@",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)redirectNSLogToDocumentF
NSArray*paths =NSSearchPathForDirectori
NSString*documentsDirectory = [pathsobjectAtIndex:0];
NSString*fileName =[NSStringstringWithFormat:@"%@.log",[NSDatedate]];
NSString*logFilePath = [documentsDirectorystringByAppendingPathCom
freopen([logFilePathcStringUsingEncoding:NSASCIIStringEncoding],"a+",stderr);
}
- (void)applicationDidFinishLaun
//真机测试时保存日志
if([CDeviceInfo getModelType] != SIMULATOR) {
[self redirectNSLogToDocumentF
}
}
真机测试的时候,可以利用freopen将标准错误输出保存到指定的文件当中,
这样就可以在问题发生后分析日志文件。
3、 设置DEBUG标志是否正确定义
Xcode 一般会在 debug 运行配置项里面已经定义号了DEBUG 标志,如果没定义我们就自己写上,以我的 Xcode 4为例,在项目get Info中找到 PreProcessor Macros 这个属性,对于 Debug 配置我们给他写上DEBUG,而在 Release 配置中把它留空。这样我们刚才那段预处理命令就可以根据这个标志来判断我们编译的时调试版本还是发布版本,从而控制 NSLog 的输出。 (因为 Xcode4 会把 debug/release 两个配置项同时对比展现出来,而 3.x 版本的只能分别设置,如果你用的时xcode 3.x开发工具, 那么就分别对 Debug/Release 都检查一下)。
- 在iOS中使用重定向,把控制台内容…
- IOS应用发布NSLog的注释及使用重定向,把控制台内容写入文件
- C++在Win32中重定向输出数据到控制台
- NSLog的注释及使用重定向;控制台内容写入文件
- 把控制台重定向到GUI组件上
- 【JAVA】把控制台重定向到GUI组件上
- C#把Console.Write从控制台重定向到TextBox
- ios NSLog内容重定向到本地
- eclipse控制台输出重定向到…
- 控制台输入输出重定向
- 重定向与请求转发的区别以及在springmvc中重定向的使用
- 在C和C++中把标准输出重定向到指定文件
- 在C和C++中把标准输出重定向到指定文件
- c#中重定向windows控制台程序的输出信息
- c#中重定向windows控制台程序的输出信息
- c#中重定向windows控制台程序的输出信息
- c#中重定向windows控制台程序的输出信息
- c#中重定向windows控制台程序的输出信息
- iPhone开发中静态库中的Category使…
- 灯火阑珊处等你回眸
- 去掉字符串中不能作为文件名的特殊…
- Android游戏开发引擎有哪些
- 常用SQL说明
- 在iOS中使用重定向,把控制台内容…
- SQLibs iOS开发常用代码库
- iOS 开发常用尺寸
- "/usr/include/sqlite3.h" …
- git笔记--基础
- ShareKit 中SHK.m中的编译错…
- Object_c底层细节
- TortoiseSVN切换登录用户
- iOS 拨打电话相关知识总结