美文网首页
将控制台NSLog以文件形式存储到磁盘

将控制台NSLog以文件形式存储到磁盘

作者: 铁头娃_e245 | 来源:发表于2020-05-21 23:12 被阅读0次
- (void)removelogFiles{
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
    NSString *rtcLogDirectory=[[paths objectAtIndex:0] stringByAppendingString:@“/NS_Log"];
    NSFileManager *fileManager = [NSFileManager defaultManager];
    BOOL  rtcLogfileExists = [fileManager fileExistsAtPath:rtcLogDirectory];
    if (rtcLogfileExists){
        NSArray *subPathArr = [[NSFileManager defaultManager] subpathsAtPath:rtcLogDirectory];
        if (subPathArr){
            for (NSString *subPath in subPathArr){
                NSString *filePath = [rtcLogDirectory stringByAppendingPathComponent:subPath];
                [[NSFileManager defaultManager] removeItemAtPath:filePath error:nil];
            }
        }
    }
}

// 保存日志文件
- (void)redirectNSLogToDocumentFolder{
    // 如果已经连接Xcode调试则不输出到文件
    if(isatty(STDOUT_FILENO))  //STDOUT_FILENO == 1
    {
        return;
    }
    UIDevice *device = [UIDevice currentDevice];
    if([[device model] hasSuffix:@"Simulator"])
    {
        //在模拟器不保存到文件中return;
    }
    // 获取Document目录下的Log文件夹,若没有则新建
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *logDirectory = [[paths objectAtIndex:0] stringByAppendingPathComponent:@"Log"];
    NSFileManager *fileManager = [NSFileManager defaultManager];
    BOOL fileExists = [fileManager fileExistsAtPath:logDirectory];
    //remove logs first
    if (fileExists){
        NSArray *subPathArr = [[NSFileManager defaultManager] subpathsAtPath:logDirectory];
        if (subPathArr){
            for (NSString *subPath in subPathArr){
                NSString *filePath = [logDirectory stringByAppendingPathComponent:subPath];
                [[NSFileManager defaultManager] removeItemAtPath:filePath error:nil];
            }
        }
    }
    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"];
    //每次启动后都保存一个新的日志文件中
    NSString *dateStr = [formatter stringFromDate:[NSDate date]];
    NSString *logFilePath = [logDirectory stringByAppendingFormat:@"/%@.txt",dateStr];
    // freopen 重定向输出输出流,将log输入到文件
    freopen([logFilePath cStringUsingEncoding:NSASCIIStringEncoding], "a+", stdout);
    freopen([logFilePath cStringUsingEncoding:NSASCIIStringEncoding], "a+", stderr);
}

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // Override point for customization after application launch.
    [self removelogFiles];
    [self redirectNSLogToDocumentFolder];
    return YES;
}

相关文章

  • 将控制台NSLog以文件形式存储到磁盘

  • 二、数据存储

    爬虫爬取的数据要经过数据存储步骤存储在磁盘上,对一些数据量较小的项目,数据可以暂时以磁盘文件的形式存储,如果数据量...

  • python文件操作

    文件操作 1.数据本地化 将数据以文件的形式,存储到本地磁盘中。(程序中变量保存的数据都是存到内存中的,当程序运行...

  • DataNode工作机制

    6.1 NameNode & DataNode工作机制 1)一个数据块在datanode上以文件形式存储在磁盘上,...

  • runtime 自动归档

    提到归档这块,首先得看了一下,常规的归档方法(又名序列化),把对象转为字节码,以文件的形式存储到磁盘上;程序运行过...

  • iOS数据持久化存储-NSKeyedArchiver

    归档(称为序列化)是把对象转为字节码,以文件的形式存储到磁盘上;程序运行过程中或者当再次重写打开程序的时候,可以通...

  • D-24操作系统磁盘管理章节

    一、磁盘格式化操作 (创建文件系统) 1.文件系统: 用户将数据存储到磁盘中的方式 FAT32(单个文件小于4G)...

  • 以文件为后背存储区的内存交换文件

    以文件为后背存储区的内存交换文件 各种后备存储器的内存映射文件 以磁盘中文件系统的具体文件为后备存储的页交换文件(...

  • redis持久化 、 RDB 快照存储、 AOF 只追加

    [TOC] 持久化 、 RDB 快照存储、 AOF 只追加文件 redis可以将数据写入到磁盘中,在停机或...

  • HDFS(六):DataNode工作机制

    DataNode工作机制 (1)一个数据块在DataNode上以文件形式存储在磁盘上,包括两个文件,一个是数据本省...

网友评论

      本文标题:将控制台NSLog以文件形式存储到磁盘

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