獲取App的全量日志器钟,能更好的獲取App內(nèi)各種活動(dòng)信息斑司,在查找問題原因時(shí),能更好的看到App活動(dòng)前后的信息姻政,方便我們定位問題原因呆抑。
目錄
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炫欺,是蘋果公司自己實(shí)現(xiàn)的一套輸出日志的接口)的 API乎完,將日志消息直接存儲(chǔ)在磁盤上熏兄。那么品洛,我們?nèi)绾尾拍塬@取到通過 ASL 存放在系統(tǒng)日志中的日志呢?
ASL 會(huì)提供接口去查找所有的日志摩桶,通過 ?CocoaLumberjack? 桥状、簡(jiǎn)書上介紹使用?這個(gè)第三方日志庫里的 DDASLLogCapture 這個(gè)類,我們可以找到實(shí)時(shí)捕獲 NSLog 的方法硝清。DDASLLogCapture 會(huì)在 start 方法里開啟一個(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è)全局的單例類酵幕,會(huì)保存 DDLogger 協(xié)議的 logger;DDLogFormatter 用來格式化日志的格式缓苛;DDLogMessage 是對(duì)日志消息的一個(gè)封裝芳撒;DDLogger 協(xié)議是由 DDAbstractLogger 實(shí)現(xiàn)的。logger 都是繼承于 DDAbstractLogger:
日志輸出到控制臺(tái)是通過 DDTTYLogger 實(shí)現(xiàn)的;
DDASLLogger 就是用來捕獲 NSLog 記錄到 ASL 數(shù)據(jù)庫的日志笔刹;
DDAbstractDatabaseLogger 是數(shù)據(jù)庫操作的抽象接口芥备;
DDFileLogger 是用來保存日志到文件的,還提供了返回 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í)間 抓取用戶手機(jī)本地日志:
? ? ? ? ?App在啟動(dòng)、從后臺(tái)進(jìn)入前臺(tái) 一瞬間山孔,開啟一個(gè)異步接口懂讯,請(qǐng)求接口 獲取 拉取日志的相關(guān)信息。然后我們根據(jù)本地的日志信息台颠,遍歷獲取我們指定的日志范圍褐望,進(jìn)行 上傳日志到我們的服務(wù)器上面。
? ? ?2> 建立長鏈接串前,收到 拉取日志的通知瘫里,進(jìn)行 本地日志的拉取。這種方案不適合大都的App荡碾,因?yàn)槲覀儾恍枰L鏈接谨读。當(dāng)有即時(shí)通訊的App的時(shí)候我們可以使用該方案。
介紹了 NSLog 和 CocoaLumberjack 日志的獲取方法坛吁。這兩種打日志的方式基本覆蓋了大部分場(chǎng)景劳殖,你在使用其他日志庫時(shí),只要找到日志存儲(chǔ)的目錄拨脉,就可以進(jìn)行日志的收集合并工作了哆姻。收集全量日志,可以提高分析和解決問題的效率玫膀,節(jié)省下來的時(shí)間我們可以去做更有意義的事情矛缨。