iOS日志及崩溃抓取

在日常开发及测试中很容易出现比较难以复现的崩溃,这种bug往往让我们无处下手,日志抓取帮我们很好的解决了这个问题。

DDLog的使用

首先可以在pch文件中定义log等级

static const DDLogLevel ddLogLevel = DDLogLevelVerbose;

在application:didFinishLaunchingWithOptions方法中调用如下代码即可发起日志记录功能

   // DDTTYLogger,你的日志语句将被发送到Xcode控制台
    [DDLog addLogger:[DDTTYLogger sharedInstance] withLevel:DDLogLevelWarning];
    // DDASLLogger,你的日志语句将被发送到苹果文件系统、你的日志状态会被发送到 Console.app
    [DDLog addLogger:[DDASLLogger sharedInstance] withLevel:DDLogLevelAll];

    // DDFileLogger,你的日志语句将写入到一个文件中,默认路径在沙盒的Library/Caches/Logs/目录下,文件名为bundleid+空格+日期.log。
    DDFileLogger *fileLogger = [[DDFileLogger alloc] init];
    fileLogger.rollingFrequency = 60 * 60 * 24; // 刷新频率为24小时
    fileLogger.logFileManager.maximumNumberOfLogFiles = 7; // 保存一周的日志,即7天
    [DDLog addLogger:fileLogger];

崩溃日志抓取

在崩溃出现时,可通过NSSetUncaughtExceptionHandler里指定崩溃出现后调用的方法,首先定义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];

    //通过DLog把报错信息写入到log日志中
    DDLogError(@"%@", exceptionInfo);
}

然后在ViewController制造log以及崩溃信息

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
    NSDateFormatter *formatter =[[NSDateFormatter alloc] init];
    [formatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
    NSString *crashTime = [formatter stringFromDate:[NSDate date]];
    DDLogWarn(@"记录打印信息------%@", crashTime);
}

- (IBAction)crashButton:(id)sender {
    NSArray * arr = @[@"1", @"2"];
    NSLog(@"%@", arr[2]);
//    [NSException raise:@"Crash Action" format:@""];
}

日志默认记录地址为Library/Caches/Logs,查看日志如下:

项目地址:https://gitee.com/langtaosha/DDLogDemo

考虑到网络请求对电量及流量的影响,日志的上传一般都不是即时的,可选择在wifi环境下上传经过ZipArchive处理过的压缩包,争取对用户的影响降到最小

原文地址:https://www.cnblogs.com/GoodmorningMr/p/11452285.html

时间: 2024-11-05 19:45:46

iOS日志及崩溃抓取的相关文章

iOS 解决Charles无法抓取Xcode6的Simulator数据包问题

官网给出解决办法:http://www.charlesproxy.com/documentation/faqs/ssl-connections-from-within-iphone-applications/ 1.charles->Help -> Install Cahrles CA SSL Certificatein iOS Simulators (charles 3.9.3以上) 2.重启模拟器

Burpsuite如何抓取使用了SSL或TLS传输的 IOS App流量

之前一篇文章介绍了Burpsuite如何抓取使用了SSL或TLS传输的Android App流量,那么IOS中APP如何抓取HTTPS流量呢, 套路基本上与android相同,唯一不同的是将证书导入ios设备的过程中有些出路,下面进行详细介绍. 以抓包工具burpsuite为例,如果要想burpsuite能抓取IOS设备上的HTTPS流量首先是要将burpsuite的证书导入到ios设备中, burpsuite的证书如何获取并保存在本地pc上请参考here. burpsuite的证书拿到了后就要

[整理]Android测试日志文件抓取与分析 -顶

http://blog.csdn.net/ameyume/article/details/7667574 1.log文件分类简介实时打印的主要有:logcat main,logcat radio,logcat events,tcpdump,还有高通平台的还会有QXDM日志状态信息的有:adb shell cat /proc/kmsg ,adb shell dmesg,adb shell dumpstate,adb shell dumpsys,adb bugreport,工程模式等2.LOG抓取详

如何抓取移动端崩溃日志?

抓取Android闪退日志: 1.下载abd安装包 2.手机连接上电脑,最好只有一台手机连接电脑,同时确保手机已开启USB调试模式(可通过手机助手查看连接 状态) 3.将下载好的abd安装包解压,存放在硬盘根目录下,如下图: 4.使用dos命令窗口 WIN+R 回车,打开dos命令窗口 进入到abd包所在的路径下,如下图: 输入命令:adb logcat -v time > D:\\logcat.log 开始抓取日志,同时在手机上操作闪退步骤 adb logcat -v time > .\\l

android开发之应用Crash自动抓取Log_自动保存崩溃日志到本地

http://blog.csdn.net/jason0539/article/details/45602655 应用发生crash之后要查看log,判断问题出在什么地方,可是一旦应用发布出去,就要想办法把用户的崩溃日志拿到分析. 所以要在发生crash之后抓取log,然后上传到服务器,方便开发者查看,现在都有很多第三方做这方面的服务,这里说下如何自己来实现. 其实原理很简单,应用出现异常后,会由默认的异常处理器来处理异常, 我们要做的就是把这个任务接管过来,自己处理异常,包括收集日志,保存到本地

使用adb命令抓取崩溃日志

使用adb命令抓取崩溃日志 2018年07月05日 11:54:21 Data-Mining 阅读数:3372 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/liuzehn/article/details/80924521 安卓开发过程中经常遇到真机崩溃的情况,这时如何拿到崩溃日志是我们十分关心的问题.手机崩溃后,不要再进行别的操作,保留现场.连接手机和电脑,使用adb命令抓取崩溃日志. adb logcat *:W 注意:这句命令的意思是显示

ios crash的原因与抓取crash日志的方法

首先我们经常会闪退的异常有哪些呢?crash的产生来源于两种问题:违反iOS策略被干掉,以及自身的代码bug. 1.IOS策略 1.1 低内存闪退 前面提到大多数crash日志都包含着执行线程的栈调用信息,但是低内存闪退日志除外,这里就先看看低内存闪退日志是什么样的. 我们使用Xcode 5和iOS 7的设备模拟一次低内存闪退,然后通过Organizer查看产生的crash日志,可以发现Process和Type都为Unknown: 1.2 Watchdog超时 Apple的iOS Develop

adb命令 logcat日志抓取

一.logcat抓log方法:adb logcat命令,可以加条件过滤 1.安装SDK(参考android sdk环境安装) 2.使用数据线链接手机,在手机助手的sdcard中建立一个1.log的文件或在抓日志时直接导出到电脑位置 3.程序运行cmd,进入到含有adb.exe目录 4.输入adb devices 查看设备是否连上 5.输入抓取命令: 存放到手机 adb logcat -s *:E > /mmt/sdcard/1.log 存放到PC adb logcat -s '*:E' > d

adb logcat日志抓取

adb命令 logcat日志抓取 一.logcat抓log方法:adb logcat命令,可以加条件过滤 1.安装SDK(参考android sdk环境安装) 2.使用数据线链接手机,在手机助手的sdcard中建立一个1.log的文件或在抓日志时直接导出到电脑位置 3.程序运行cmd,进入到含有adb.exe目录 4.输入adb devices 查看设备是否连上 5.输入抓取命令: 存放到手机 adb logcat -s *:E > /mmt/sdcard/1.log 存放到PC adb log