ios 将NSLog日志重定向输出到文件中保存
2016-06-17 18:18
567 查看
#pragma mark - 用户方法,将nslog的输出信息写入到dr.log文件中; // 将NSlog打印信息保存到Document目录下的文件中 - (void)redirectNSlogToDocumentFolder { //如果已经连接Xcode调试则不输出到文件 // 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:NSASCIIStringEncoding], "a+", stdout); freopen([logFilePath cStringUsingEncoding:NSASCIIStringEncoding], "a+", stderr); //未捕获的Objective-C异常日志 NSSetUncaughtExceptionHandler(&UncaughtExceptionHandler); // NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); // NSString *documentDirectory = [paths objectAtIndex:0]; // NSString *fileName = [NSString stringWithFormat:@"dr.log"];// 注意不是NSData! // NSString *logFilePath = [documentDirectory stringByAppendingPathComponent:fileName]; // // 先删除已经存在的文件 // NSFileManager *defaultManager = [NSFileManager defaultManager]; // [defaultManager removeItemAtPath:logFilePath error:nil]; // // // 将log输入到文件 // freopen([logFilePath cStringUsingEncoding:NSASCIIStringEncoding], "a+", stdout); // freopen([logFilePath cStringUsingEncoding:NSASCIIStringEncoding], "a+", stderr); // freopen([logFilePath cStringUsingEncoding:NSASCIIStringEncoding], "a+", stdin); //把错误日志发送到邮箱 NSString *urlStr = [NSString stringWithFormat:@"mailto://934111653@qq.com?subject=bug报告&body=感谢您的配合!<br><br><br>错误详情:<br>%@",dateStr ]; NSURL *url = [NSURL URLWithString:[urlStr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]]; [[UIApplication sharedApplication] openURL:url]; } void UncaughtExceptionHandler(NSException* exception) { NSString* name = [ exception name ]; NSString* reason = [ exception reason ]; NSArray* symbols = [ exception callStackSymbols ]; // 异常发生时的调用栈 NSMutableString* strSymbols = [ [ NSMutableString alloc ] init ]; //将调用栈拼成输出日志的字符串 for ( NSString* item in symbols ) { [ strSymbols appendString: item ]; [ strSymbols appendString: @"\r\n" ]; } //将crash日志保存到Document目录下的Log文件夹下 NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *logDirectory = [[paths objectAtIndex:0] stringByAppendingPathComponent:@"Log"]; NSFileManager *fileManager = [NSFileManager defaultManager]; if (![fileManager fileExistsAtPath:logDirectory]) { [fileManager createDirectoryAtPath:logDirectory withIntermediateDirectories:YES attributes:nil error:nil]; } NSString *logFilePath = [logDirectory stringByAppendingPathComponent:@"UncaughtException.log"]; 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 *crashString = [NSString stringWithFormat:@"<- %@ ->[ Uncaught Exception ]\r\nName: %@, Reason: %@\r\n[ Fe Symbols Start ]\r\n%@[ Fe Symbols End ]\r\n\r\n", dateStr, name, reason, strSymbols]; //把错误日志写到文件中 if (![fileManager fileExistsAtPath:logFilePath]) { [crashString writeToFile:logFilePath atomically:YES encoding:NSUTF8StringEncoding error:nil]; }else{ NSFileHandle *outFile = [NSFileHandle fileHandleForWritingAtPath:logFilePath]; [outFile seekToEndOfFile]; [outFile writeData:[crashString dataUsingEncoding:NSUTF8StringEncoding]]; [outFile closeFile]; } //把错误日志发送到邮箱 NSString *urlStr = [NSString stringWithFormat:@"mailto://934111653@qq.com?subject=bug报告&body=感谢您的配合!<br><br><br>错误详情:<br>%@",crashString ]; NSURL *url = [NSURL URLWithString:[urlStr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]]; [[UIApplication sharedApplication] openURL:url]; }
转自:http://www.xuebuyuan.com/2128136.html
相关文章推荐
- iOS开发之第三方登录QQ -- 史上最全最新第三方登录QQ方式实现
- iOS 苹果审核被下架的部分原因
- frame与bounds的区别比较
- 实际案例讲解iOS设计模式——MVC模式
- IOS 开发过程中的 消息通知 小红点
- ios开发——AirPlay相关文章
- iOS 如何截取超出屏幕区域的图片
- 清除xcode中的Welcome to Xcode中的最近打开的文件
- ##ios蓝牙开发(二)ios连接外设的代码实现
- iOS 编译包含 bitcode 的 fdk-aac 静态库(包含 arm64)
- 深入理解 KVC\KVO 实现机制 — KVC
- IOS 会动的登录界面
- ##**iOS蓝牙开发(一)蓝牙相关基础知识**
- ioS 几何类型汇总
- Crosswalk Project for iOS
- iOS 使用Mansory 进行键盘和输入框的适配
- [81gNose]你不知道的那些tableViewCell中的那些坑
- iOS开发 给Label加下划线、中划线
- 深入理解 KVC\KVO 实现机制 — KVO
- js判断是Android系统还是ios系统