美文网首页
ios日志采集

ios日志采集

作者: 浅_若清风 | 来源:发表于2021-08-09 09:15 被阅读0次

    stdio(standard input & output)(标准输入输出)。iOS中,我们可以使用stdio类的方法来实现日志采集功能。
    1.日志收集

    - (void)logcollection
    {
        //自定义文件名
        NSString *documentDirectory = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
        NSDateFormatter *dateformat = [[NSDateFormatter  alloc]init];
        [dateformat setDateFormat:@"yyyy-MM-dd-HH:mm:ss"];
        NSString *timeStr = [dateformat stringFromDate:[NSDate date]];
        NSString *fileName = [NSString stringWithFormat:@"MY_LOG_FILE&&%@.log",timeStr];
        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);
    }
    

    logFilePath为自定义的文件名称路径,在保存文件时,因判断目录中是否存在同名文件,存在则先删除,以防重名。freopen函数用于重定向输入输出流,stdout(Standardoutput)表示标准输出,stderr(Standarderror)表示标准错误。
    2.自定义打印日志的NSLog

    //日志打印
    #ifdef DEBUG
    #define DSLog(format, ...) printf("class: <%p %s:(%d) > method: %s \n%s\n", self, [[[NSString stringWithUTF8String:__FILE__] lastPathComponent] UTF8String], __LINE__, __PRETTY_FUNCTION__, [[NSString stringWithFormat:(format), ##__VA_ARGS__] UTF8String] )
    #else
    #define DSLog(format, ...) printf("class: <%p %s:(%d) > method: %s \n%s\n", self, [[[NSString stringWithUTF8String:__FILE__] lastPathComponent] UTF8String], __LINE__, __PRETTY_FUNCTION__, [[NSString stringWithFormat:(format), ##__VA_ARGS__] UTF8String] )
    #endif
    

    3使用DSLog打印日志

    DSLog(@"xxx")
    

    4.在AppDelegate.m的didFinishLaunchingWithOptions方法里调用logcollection方法,运行程序,则工程里的所有运行到的DSLog打印日志都会自动写入创建的.log文件中

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
    {
          [self logcollection];
    }
    

    5.获取log日志文件

    - (void)getLogFile
    {
        //所有符合条件的log日志文件集合
        NSMutableArray *dataAry = [NSMutableArray new];
        NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
        NSString *tmpPath = [paths objectAtIndex:0];
        NSArray *files = [[NSFileManager defaultManager] subpathsOfDirectoryAtPath:tmpPath error:nil];
        //过滤文件,只取MY_LOG_FILE类型文件
        for (int i=0; i<files.count; i++)
       {
            NSString *temStr = files[i];
            if ([temStr containsString:@"MY_LOG_FILE"])
            {
                [dataAry addObject:files[i]];
            }
        }
    }
    

    相关文章

      网友评论

          本文标题:ios日志采集

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