NSLog重写定向

作者: 十一岁的加重 | 来源:发表于2017-06-21 13:25 被阅读12384次
    
    /**
     在给测试打包时,经常出现一些问题,没有log太坑了,直接输出到doc目录吧
     */
    - (void)redirectNSLogToDocumentFolder {
        
        //如果已经连接Xcode调试则不输出到文件
        //该函数用于检测输出 (STDOUT_FILENO) 是否重定向 是个 Linux 程序方法
        if(isatty(STDOUT_FILENO)) {
            return;
        }
    #if (TARGET_IPHONE_SIMULATOR)
        // 判断 当前是否在 模拟器环境 下 在模拟器不保存到文件中
    #else
        //将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);
        
    #endif
    }
    
    

    引用:
    http://danny-lau.com/2017/05/22/ios-expection-catch/

    相关文章

      网友评论

        本文标题:NSLog重写定向

        本文链接:https://www.haomeiwen.com/subject/qbozqxtx.html