iOS中捕获日志与异常示例详解-创新互联
前言
目前成都创新互联已为上1000+的企业提供了网站建设、域名、虚拟空间、网站托管、企业网站设计、北海网站维护等服务,公司将坚持客户导向、应用为本的策略,正道将秉承"和谐、参与、激情"的文化,与客户和合作伙伴齐心协力一起成长,共同发展。在平时自己调试的时候,可以直接连接电脑,直接在窗口中查看结果。但是在测试人员测试,或者灰度测试的时候,怎么才能拿到日志呢?最先想到的肯定是输出到本地文件,然后在需要的时候进行上传。
分享一段之前找到的方法,下面的代码提供了两个主要功能:
– 把日志输出到文件中
– 捕捉异常信息
【解析都写在注释中了】
示例代码
- (void)redirectNSLogToDocumentFolder { //如果已经连接Xcode调试则不输出到文件 //该函数用于检测输出 (STDOUT_FILENO) 是否重定向 是个 Linux 程序方法 if(isatty(STDOUT_FILENO)) { return; } // 判断 当前是否在 模拟器环境 下 在模拟器不保存到文件中 UIDevice *device = [UIDevice currentDevice]; if([[device model] hasSuffix:@"Simulator"]){ return; } //将NSlog打印信息保存到Document目录下的Log文件夹下 NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *logDirectory = [[paths objectAtIndex:0] stringByAppendingPathComponent:@"Log"]; NSFileManager *fileManager = [NSFileManager defaultManager]; BOOL fileExists = [fileManager fileExistsAtPath:logDirectory]; if (!fileExists) { [fileManager createDirectoryAtPath:logDirectory withIntermediateDirectories:YES attributes:nil error:nil]; } NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; [formatter setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"zh_CN"]]; [formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"]; //每次启动后都保存一个新的日志文件中 NSString *dateStr = [formatter stringFromDate:[NSDate date]]; NSString *logFilePath = [logDirectory stringByAppendingFormat:@"/%@.log",dateStr]; // 将log输入到文件 freopen([logFilePath cStringUsingEncoding:NSUTF8StringEncoding], "a+", stdout); freopen([logFilePath cStringUsingEncoding:NSUTF8StringEncoding], "a+", stderr); //未捕获的Objective-C异常日志 NSSetUncaughtExceptionHandler (&UncaughtExceptionHandler); }
另外有需要云服务器可以了解下创新互联建站www.cdcxhl.com,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。
当前文章:iOS中捕获日志与异常示例详解-创新互联
浏览地址:http://cdiso.cn/article/csssch.html