獲取App的全量日志,能更好的獲取App內(nèi)各種活動(dòng)信息,在查找問(wèn)題原因時(shí),能更好的看到App活動(dòng)前后的信息,方便我們定位問(wèn)題原因。
目錄
1、獲取系統(tǒng)自帶 NSLog 的日志
1、獲取系統(tǒng)自帶 NSLog 的日志
1、NSLog 其實(shí)就是一個(gè) C 函數(shù),函數(shù)聲明是:void NSLog(NSString *format, ...);
它的作用是,輸出信息到標(biāo)準(zhǔn)的 Error 控制臺(tái)和系統(tǒng)日志(syslog)中。在內(nèi)部實(shí)現(xiàn)上,它其實(shí)使用的是 ASL(Apple System Logger,是蘋(píng)果公司自己實(shí)現(xiàn)的一套輸出日志的接口)的 API,將日志消息直接存儲(chǔ)在磁盤(pán)上。那么,我們?nèi)绾尾拍塬@取到通過(guò) ASL 存放在系統(tǒng)日志中的日志呢?
ASL 會(huì)提供接口去查找所有的日志,通過(guò) ?CocoaLumberjack? 、簡(jiǎn)書(shū)上介紹使用?這個(gè)第三方日志庫(kù)里的 DDASLLogCapture 這個(gè)類(lèi),我們可以找到實(shí)時(shí)捕獲 NSLog 的方法。DDASLLogCapture 會(huì)在 start 方法里開(kāi)啟一個(gè)異步全局隊(duì)列去捕獲 ASL 存儲(chǔ)的日志。start 方法的代碼如下:
+ (void)start { ... dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^(void) { [self captureAslLogs]; }); }
2、獲取 CocoaLumberjack 日志:
CocoaLumberjack 主要由 DDLog、DDLoger、DDLogFormatter 和 DDLogMessage 四部分組成,其整體架構(gòu)如下圖所示:
在這其中,DDLog 是個(gè)全局的單例類(lèi),會(huì)保存 DDLogger 協(xié)議的 logger;DDLogFormatter 用來(lái)格式化日志的格式;DDLogMessage 是對(duì)日志消息的一個(gè)封裝;DDLogger 協(xié)議是由 DDAbstractLogger 實(shí)現(xiàn)的。logger 都是繼承于 DDAbstractLogger:
日志輸出到控制臺(tái)是通過(guò) DDTTYLogger 實(shí)現(xiàn)的;
DDASLLogger 就是用來(lái)捕獲 NSLog 記錄到 ASL 數(shù)據(jù)庫(kù)的日志;
DDAbstractDatabaseLogger 是數(shù)據(jù)庫(kù)操作的抽象接口;
DDFileLogger 是用來(lái)保存日志到文件的,還提供了返回 CocoaLumberjack 日志保存文件路徑的方法,使用方法如下:
DDFileLogger *fileLogger = [[DDFileLogger alloc] init]; NSString *logDirectory = [fileLogger.logFileManager logsDirectory];
3、拿到Log日志文件,我們可以進(jìn)行上傳到我們的服務(wù)器系統(tǒng)。但是這么多日志我們都上傳服務(wù)器可能不太方便現(xiàn)實(shí)。
? ? ? 1> 后臺(tái)根據(jù)指定時(shí)間 抓取用戶(hù)手機(jī)本地日志:
? ? ? ? ?App在啟動(dòng)、從后臺(tái)進(jìn)入前臺(tái) 一瞬間,開(kāi)啟一個(gè)異步接口,請(qǐng)求接口 獲取 拉取日志的相關(guān)信息。然后我們根據(jù)本地的日志信息,遍歷獲取我們指定的日志范圍,進(jìn)行 上傳日志到我們的服務(wù)器上面。
? ? ?2> 建立長(zhǎng)鏈接,收到 拉取日志的通知,進(jìn)行 本地日志的拉取。這種方案不適合大都的App,因?yàn)槲覀儾恍枰L(zhǎng)鏈接。當(dāng)有即時(shí)通訊的App的時(shí)候我們可以使用該方案。
介紹了 NSLog 和 CocoaLumberjack 日志的獲取方法。這兩種打日志的方式基本覆蓋了大部分場(chǎng)景,你在使用其他日志庫(kù)時(shí),只要找到日志存儲(chǔ)的目錄,就可以進(jìn)行日志的收集合并工作了。收集全量日志,可以提高分析和解決問(wèn)題的效率,節(jié)省下來(lái)的時(shí)間我們可以去做更有意義的事情。