iOS 将NSLog写入文件中

写在AppDelegate.m的** application: didFinishLaunchingWithOptions**中:

#if (DEBUG == 1 || TARGET_OS_SIMULATOR)
#else
#ifdef FILELOG_SUPPORT
    [self redirectNSlogToDocumentFolder];
#endif
#endif
#pragma mark 日志记录方法
- (void)redirectNSLogToDocumentFolder {

   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);
    
    //删除今天以前的数据
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{
        [formatter setDateFormat:@"yyyy-MM-dd"];
        NSString *ToDayTimeStr = [formatter stringFromDate:[NSDate date]];
        NSDate *ToDayDate = [formatter dateFromString:ToDayTimeStr];
        NSArray *fileListArr = [fileManager contentsOfDirectoryAtPath:logDirectory error:nil];
        for (NSString *Str in fileListArr) {
            NSString *DayTimeInStr = [Str substringToIndex:10];
            NSDate *OtherDate = [formatter dateFromString:DayTimeInStr];
            NSComparisonResult result = [ToDayDate compare:OtherDate];
            if (result == NSOrderedDescending) {
                NSFileManager *fileManger = [NSFileManager defaultManager];
                NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
                NSString *logDirectory = [[paths objectAtIndex:0] stringByAppendingPathComponent:@"Log"];
                NSString *filePath = [logDirectory stringByAppendingPathComponent:Str];
                [fileManger removeItemAtPath:filePath error:nil];
            }
        }
    });
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 玉水壶中百味生, 乾坤斗转问茶明。 人生也似醉中清。 小草逢春青满院, 樱花欲放待君行。 玉兰怒冠已羞卿。
    东北老农阅读 153评论 3 3
  • 秦岭南麓,终南首邑。东达州城,西邻安康,南通镇安接荆楚,北连长安近省城。有秦之雄骨,楚之秀韵,千年古邑,千...
    衘觞赋诗阅读 1,247评论 0 2
  • 其实,口罩是最不卫生的。表面上隔离灰尘,实际上,口腔呼吸造成的潮湿,滋养细菌,口罩对呼吸的影响,降低体能,口罩引起...
    锦欣念德阅读 267评论 0 0