iOS 日志監(jiān)控:獲取 App 中的全量日志

獲取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í)間我們可以去做更有意義的事情。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 本文是< > 第十五篇學(xué)習(xí)筆記. iOS10之前獲取 NSLog 的日志 NSLog 其實(shí)就是一個(gè) C 函數(shù),函數(shù)...
    forping閱讀 1,450評(píng)論 0 0
  • 引入 在iOS開(kāi)發(fā)中,日志系統(tǒng)是很重要的一個(gè)部分,尤其是在修復(fù)代碼中的bug,通常會(huì)用NSLog來(lái)將這些信息打印到...
    AirChen閱讀 4,388評(píng)論 0 8
  • 本文的原始發(fā)布地址在我的個(gè)人博客 https://yohunl.com/iosri-zhi-huo-qu-he-s...
    yohunl閱讀 5,909評(píng)論 2 42
  • 我們?cè)陂_(kāi)發(fā)中經(jīng)常需要打日志,iOS提供的NSLog只能在Xcode里面查看,這種方式有如下限制: 1、只有處于De...
    52xpz閱讀 8,269評(píng)論 0 22
  • 會(huì)的不難,難的不會(huì),這大概就是溫習(xí)舊知識(shí)和學(xué)習(xí)新知識(shí)時(shí)的感受了吧。 這幾天百度Debug日志管理,利用CocoaL...
    plantseeds閱讀 13,122評(píng)論 9 62

友情鏈接更多精彩內(nèi)容