1. 程式人生 > >如何為應用建立收集崩潰日誌文字

如何為應用建立收集崩潰日誌文字

在我們開發的應用中,總是不可避免地會產生Bug。要是能夠把應用的崩潰資訊收集起來並傳到我們能夠接收到的地方,那麼對於已釋出上線的應用所發生的崩潰我們就能夠很好地對其進行分析了。

這裡要提到的一個函式就是在iOS SDK中自帶的NSSetUncaughtExceptionHandler,可用來做異常處理,但功能較為有限,而引起崩潰的大多數原因如:記憶體訪問錯誤,重複釋放等錯誤就無能為力了,因為這種錯誤它丟擲的是Signal,所以必須要專門做Signal處理。

下面分享我的做法:

在AppDelegate.m檔案中的didFinishLaunchingWithOptions方法中,

    [self
creatExceptionText]; //註冊異常崩潰訊息處理函式的處理方法 NSSetUncaughtExceptionHandler (&UncaughtExceptionHandler); void UncaughtExceptionHandler(NSException *exception) { NSMutableDictionary *logDic = [[NSMutableDictionary alloc]init]; [logDic setObject:[NSDate date] forKey:@"date"]; // exception info 崩潰/異常資訊
NSArray *arr = [exception callStackSymbols]; NSString *reason = [exception reason]; NSString *name = [exception name]; [logDic setObject:name forKey:@"name"]; [logDic setObject:reason forKey:@"reason"]; [logDic setObject:[arr componentsJoinedByString:@"\n"] forKey:@"log"]; // Device info 裝置資訊
[logDic setObject:[UIDevice currentDevice].model forKey:@"device"]; [logDic setObject:[UIDevice currentDevice].systemVersion forKey:@"osversion"]; // batteryLevel info 電池剩餘電量資訊 [[UIDevice currentDevice] setBatteryMonitoringEnabled:YES]; [logDic setObject:[NSNumber numberWithFloat:[UIDevice currentDevice].batteryLevel*100] forKey:@"batteryLevel"]; [[UIDevice currentDevice] setBatteryMonitoringEnabled:NO]; NSString *path = logPathUrl(); NSDictionary *logfile = [NSDictionary dictionaryWithDictionary:logDic]; [logfile writeToFile:path atomically:YES];//把錯誤日誌寫入檔案 } /** 獲取崩潰日誌的檔案路徑 @return 崩潰日誌的檔案路徑 */ NSString *logPathUrl() { return [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingPathComponent:@"Carsh.txt"]; } - (void)creatExceptionText{ NSFileManager *fileManager = [NSFileManager defaultManager]; NSArray *document = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *docu = [document firstObject]; NSString *filePath = [docu stringByAppendingPathComponent:@"Carsh.txt"]; if (![fileManager fileExistsAtPath:filePath]) { [fileManager createFileAtPath:filePath contents:nil attributes:nil]; } else{ //1、日誌是否有內容 NSData *data = [NSData dataWithContentsOfFile:filePath]; if (data.length > 0) { //2、則把崩潰日誌檔案上傳至伺服器中 if ([Utils httpPostCrashFile:filePath]) { //3、最後是否成功移除崩潰日誌 if([fileManager removeItemAtPath:filePath error:nil]){ NSLog(@"Carsh.txt remove successful"); } } } } }

相關推薦

如何應用建立收集崩潰日誌文字

在我們開發的應用中,總是不可避免地會產生Bug。要是能夠把應用的崩潰資訊收集起來並傳到我們能夠接收到的地方,那麼對於已釋出上線的應用所發生的崩潰我們就能夠很好地對其進行分析了。 這裡要提到的一個函式就是在iOS SDK中自帶的NSSetUncaughtExce

Android收集崩潰日誌並上傳

public class CrashHandler implements Thread.UncaughtExceptionHandler { public static final String TAG = "CrashHandler"; // 系統預設的

手機不列印崩潰日誌log問題解決

http://blog.csdn.net/wave_1102/article/details/39301633 a. 在撥號介面輸入“*#*#2846579#*#*” b. 若是小米4.0系統(MIUI),進入“設定-->全部設定-->原廠設定-->

移動應用崩潰日誌收集工具對比

背景 移動網際網路時代,由於 Android 裝置的碎片化,客服人員每天要接到很多使用者反饋在各種不同機型上的崩潰問題,又沒有辦法提供具體的 Crash 日誌給開發人員。測試人員每天需要對使用者的反饋

Android 應用崩潰日誌收集和上傳

如何將應用崩潰日誌收集起來? Android 應用難以避免的會 crash ,也稱為崩潰,無論你的程式多完美,總是無法避免 crash 的發生。這對使用者來說是很不友好的,也是開發者所不願意看到的。更糟糕的是,當用戶發生了 crash ,開發者卻不知道程式為何

Android 應用程式崩潰日誌捕捉

程式崩潰是應用迭代中不可避免的問題,即使有著5年或者10年經驗的程式猿也無法完全保證自己的程式碼沒有任何的bug導致崩潰,現在有一些第三方平臺可以幫助我們蒐集應用程式的崩潰,比如友盟,詳情如下圖 雖然能夠看到崩潰的日誌以及機型等,但還是不是很方便,如果需要精確定位的話需要使用者提供崩潰的時間點、機型

logstash收集Nginx日誌,轉換JSON格式

Nginx日誌處理為JSON格式,並放置在http區塊: 1 log_format json '{"@timestamp":"$time_iso8601",' 2 '"@version":"1",' 3

Linux - 常用日誌文字檢視工具與應用技巧

主要參考 Linux more命令 | 菜鳥教程 Linux less命令 | 菜鳥教程 主要介紹Linux終端中head、tail、cat、more和less工具用於檢視日誌文字時的基礎功能與特性區別。 head使用說明 head用於將檔案或標準輸入的頭部(預設前10行)輸出到

Java 程式建立日誌系統

使用JAVA建立日誌系統有兩種方法     1.使用log4j操作日誌檔案     2.使用系統重定向輸出日誌資訊   方法1:使用log4j操作日誌檔案(可使用jar或者xml)      步驟1:下載log4j.jar         下載地址:http://mirrors.hust.edu.c

seo-mask -- 單頁應用建立一個適合蜘蛛爬取的seo網站

seo-mask seo-mask是利用搜索引擎蜘蛛的爬取原理(蜘蛛只會爬取網頁的內容,並不會關心解析網頁裡的css和js),製作一套專門針對seo的映象網站,鄙人稱它為針對seo的mask,讓蜘蛛看到的是網站的mask更利於收錄。無需改變原有網站的原始碼,此方法適合seo改造成本較大的具有動態資料的spa

捕獲應用程式崩潰日誌

  作為一名iOS移動應用開發者,為了確保你的應用程式正確無誤,在將應用程式提交到應用商店之前,你必定會進行大量的測試工作;而且在你測試的過程中應用程式執行的很好,但是在應用商店上線之後,還是有使用者抱怨應用程式會“閃退”!現在作為應用程式的開發人員你肯定會

獲取IOS應用異常崩潰日誌資訊

應用異常崩潰是很正常的事情,但是應用異常崩潰資訊對開發者非常重要。下面就介紹如何在iOS應用中捕獲異常崩潰資訊: 1. 程式啟動中新增異常捕獲監聽函式,用來獲取異常資訊   NSSetUncaughtExceptionHandler (&UncaughtExcep

android app崩潰日誌收集以及上傳

已經做成sdk的形式,原始碼已公開,原始碼看不懂的請自行google。 如果想定製適應自己app的sdk請自行fork。 AndroidLogCollector android app崩潰日誌收集sdk 1.0 作者:賈博士 崩潰日誌收集方法: 1.L

iOS 崩潰日誌 收集與傳送伺服器

iOS開發中我們會遇到程式丟擲異常退出的情況,如果是在除錯的過程中,異常的資訊是一目瞭然,我們可以很快的定位異常的位置並解決問題。那麼當應用已經打包,iPhone裝置通過ipa的包

android開發之應用Crash自動抓取Log_自動儲存崩潰日誌到本地

應用發生crash之後要檢視log,判斷問題出在什麼地方,可是一旦應用釋出出去,就要想辦法把使用者的崩潰日誌拿到分析。所以要在發生crash之後抓取log,然後上傳到伺服器,方便開發者檢視,現在都有很多第三方做這方面的服務,這裡說下如何自己來實現。其實原理很簡單,應用出現異常

iOS應用崩潰日誌揭祕

作為一名應用開發者,你是否有過如下經歷? 為確保你的應用正確無誤,在將其提交到應用商店之前,你必定進行了大量的測試工作。它在你的裝置上也執行得很好,但是,上了應用商店後,還是有使用者抱怨會閃退 ! 如果你跟我一樣是個完美主義者,你肯定想將應用做到盡善盡美。於是你

Android崩潰日誌收集

crash日誌收集這個已經有許多成熟的第三方庫實現了這個功能了,大多是以服務的方式提供,這裡有個上傳日誌的需求,在使用者本地的資訊需要採集和資料處理。 如果是創業公司,國內建議使用網易雲捕或者騰訊Bugly 國外建議使用Crashlytics 如果要自己搭建伺服器

iOS APP 崩潰日誌收集

推薦Bugly(只用過這個第三方的) 使用時也很簡單,在Bugly中心新建產品,它會生成一個appid給你,你需要做的最後一步就是在appdelegate裡新增如下程式碼 - (BOOL)application:(UIApplication *)applicatio

iOS 崩潰日誌收集及分析

最近幾天,專案中在增加推送功能,選用的極光推送SDK,相信大家也都用過,官方文件的整合步驟很詳細,整合也很容易。但是這跟今天的主題有什麼關係呢??? 黑人問號???別急,下面就來說說我今天的遭遇。坑~~~ 話說,由於iOS10之後,蘋果對推送進行了重大更新,主要是新增了 U

Android Native 崩潰日誌收集

通過崩潰捕獲和收集,可以收集到已釋出應用(遊戲)的異常,以便開發人員發現和修改bug,對於提高軟體質量有著極大的幫助。本文介紹了iOS和android平臺下崩潰捕獲和收集的原理及步驟,不過如果是個人開發應用或者沒有特殊限制的話,就不用往下看了,直接把友盟sdk(一個統計分析sdk)加入到工程中就萬事大吉了,