美文网首页
Crash日志收集 上传到服务器

Crash日志收集 上传到服务器

作者: EnjoyWT | 来源:发表于2017-09-01 11:23 被阅读43次

    方法一: 利用苹果系统自带的崩溃日志来统计信息.
    引用作者:[作者地址][1]
    [1]:http://www.jianshu.com/p/ea1e6b210b27
    方法二:[第三方工具]2

    :下午再补充----

    方法一:

    1. 新建一个CatchCrash类:
      CatchCrash.h
    #import <Foundation/Foundation.h>
    
    @interface CatchCrash : NSObject
    void uncaughtExceptionHandler(NSException *exception);
    
    @end
    

    CatchCrash.m

    #import "CatchCrash.h"
    
    @implementation CatchCrash
    
    //在AppDelegate中注册后,程序崩溃时会执行的方法
    void uncaughtExceptionHandler(NSException *exception)
    {
        //获取系统当前时间,(注:用[NSDate date]直接获取的是格林尼治时间,有时差)
        NSDateFormatter *formatter =[[NSDateFormatter alloc] init];
        [formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
        NSString *crashTime = [formatter stringFromDate:[NSDate date]];
        //异常的堆栈信息
        NSArray *stackArray = [exception callStackSymbols];
        //出现异常的原因
        NSString *reason = [exception reason];
        //异常名称
        NSString *name = [exception name];
    
        //拼接错误信息
        NSString *exceptionInfo = [NSString stringWithFormat:@"crashTime: %@ Exception reason: %@\nException name: %@\nException stack:%@", crashTime, name, reason, stackArray];
    
        //把错误信息保存到本地文件,设置errorLogPath路径下
        //并且经试验,此方法写入本地文件有效。
        NSString *errorLogPath = [NSString stringWithFormat:@"%@/Documents/error.log", NSHomeDirectory()];
        NSError *error = nil;
        BOOL isSuccess = [exceptionInfo writeToFile:errorLogPath atomically:YES encoding:NSUTF8StringEncoding error:nil];
        if (!isSuccess) {
            NSLog(@"将crash信息保存到本地失败: %@", error.userInfo);
    }
    

    2 . 完成了CatchCrash类,接下来,AppDelegate.h里 #import "CatchCrash.h"
    在didFinishLaunchingWithOptions中添加如下代码(注册收集崩溃日志函数):

    //注册消息处理函数的处理方法
    //如此一来,程序崩溃时会自动进入CatchCrash.m的uncaughtExceptionHandler()方法
    NSSetUncaughtExceptionHandler(&uncaughtExceptionHandler);
    

    3 . 最后 在AppDelegate 中 didFinishLaunchingWithOptions 写崩溃日志上报逻辑 .

    //若crash文件存在,则写入log并上传,然后删掉crash文件
    NSFileManager *fileManager = [NSFileManager defaultManager];
    NSString *errorLogPath = [NSString stringWithFormat:@"%@/Documents/error.log", NSHomeDirectory()];
    
    if ([fileManager fileExistsAtPath:errorLogPath]) {
    //上报逻辑
    }
    
    方法二 :第三方统计工具

    相关文章

      网友评论

          本文标题:Crash日志收集 上传到服务器

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