1. 程式人生 > >iOS之DDLog列印日誌

iOS之DDLog列印日誌

DDLog優點

快速 
在大多數用例中,Lumberjack比NSLog快了一個數量級。

簡單 
當應用程式啟動時,只需一行加單的程式碼就可配置Lumberjack。然後用DDLog語句簡單地取代NSLog語句。 
根據你需要的功能新增不同的Loger,後面會介紹各個Loger的作用

[DDLog addLogger:[DDTTYLogger sharedInstance]];
[DDLog addLogger:[DDASLLogger sharedInstance]]; 
[DDLog addLogger:[DDTTYLogger sharedInstance]];

強大 
一個日誌語句可以被髮送到多個logger,意味著你可以同時記錄檔案和控制檯。此外,還可以建立自己的logger,將日誌語句傳送到網路、資料庫或者分散式檔案系統中。沒有任何限制。

靈活性 
配置你自己想要的日誌框架。修改每個檔案的日誌級別(尤其是測試時)。修改每個logger的日誌級 別(詳細的控制檯,但是簡潔的日誌檔案)。修改每個Xcode配置的日誌級別。為你的應用程式定製日誌級別的數量。新增自己的精細的日誌。在執行時動態修改日誌級別。 選擇如何以及何時回滾你的日誌檔案。將日誌檔案上傳至中心伺服器。壓縮存檔日誌檔案來節省硬碟空間。

什麼時候使用DDLog

1.你想找到一種方式來跟蹤在程式中不斷出現的不可複製的bug; 
2.你對iPhone上的簡短日誌感到很失望; 
3.出於支援系統和穩定性的需要,你想將應用程序升級到下一級別; 
4.為你的應用程式(Mac或者iPhone)尋找企業級的日誌解決方案

如何使用DDLog

開始 
三步開始使用CocoaLumberjack框架: 
1.將Lumberjack檔案新增到你的專案中; 
2.配置框架; 
3.將NSLog指令轉換為使用Lumberjack巨集指令; 

把Lumberjack框架新增到你的專案 
需要新增的主要檔案有四個: 
[email protected](整個框架的基礎) 
[email protected](傳送日誌語句到蘋果的日誌系統,以便它們顯示在Console.app上) 
[email protected](傳送日誌語句到Xcode控制檯,如果可用) 
[email protected]

(把日誌語句傳送至檔案)

DDLog是強制性的,其餘的都是可選的,這取決於你打算如何使用這個框架。例如,如果你不打算紀錄到一個檔案,你可以跳過DDFileLogger,或者你想跳過ASL以便更快的檔案記錄,你可以跳過DDASLLoger。

配置框架 
首先,你想要在你的應用程式中配置這個日誌框架,通常在applicationDidFinishLaunching方法中配置。

開始時,你需要下面兩行程式碼:

[DDLog addLogger:[DDASLLogger sharedInstance]]; 
[DDLog addLogger:[DDTTYLogger sharedInstance]]; 

這將在你的日誌框架中新增兩個“logger”。也就是說你的日誌語句將被髮送到Console.app和Xcode控制 臺(就像標準的NSLog)

這個框架的好處之一就是它的靈活性,如果你還想要你的日誌語句寫入到一個檔案中,你可以新增和配置一個file logger:

fileLogger = [[DDFileLogger alloc] init]; 
fileLogger.rollingFrequency = 60 * 60 * 24; // 24 hour rolling  
fileLogger.logFileManager.maximumNumberOfLogFiles = 7;  
[DDLog addLogger:fileLogger]; 

上面的程式碼告訴應用程式要在系統上保持一週的日誌檔案。

用DDLog替換NSLog語句 
DDLog的標頭檔案定義了你用來替換NSLog語句的巨集,本質上看起來向下邊這樣:

// Convert from this: 
NSLog(@"Broken sprocket detected!"); 
NSLog(@"User selected file:%@ withSize:%u", filePath, fileSize); 
// To this: 
DDLogError(@"Broken sprocket detected!"); 
DDLogVerbose(@"User selected file:%@ withSize:%u", filePath, fileSize);

我們看到DDLog巨集和NSLog的語法完全相同。

所以你所要做的就是決定每個NSlog語句屬於哪種日誌級別。DDLog預設有四種級別的日誌,分別是:

<code class="hljs ruby has-numbering" style="display: block; padding: 0px; background-color: transparent; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-position: initial initial; background-repeat: initial initial;"><span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">1</span>.<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">@DDlogError</span>
<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">2</span>.<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">@DDlogWarn</span>
<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">3</span>.<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">@DDlogInfo</span>
<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">4</span>.<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">@DDlogVerbose</span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li></ul>

(注意:你也可以自定義級別以及級別名或者新增更精細的控制來代替系統四個簡單的等級。)

當然選擇哪個NSLog語句取決於你的訊息的嚴重程度。

下面的這些不同的日誌等級也許正有你所需要的: 
1.如果你將日誌級別設定為 LOG_LEVEL_ERROR,那麼你只會看到DDlogError語句。 
2.如果你將日誌級別設定為LOG_LEVEL_WARN,那麼你只會看到DDLogError和DDLogWarn語句。 
3.如果您將日誌級別設定為 LOG_LEVEL_INFO,那麼你會看到error、Warn和Info語句。 
4.如果您將日誌級別設定為LOG_LEVEL_VERBOSE,那麼你會看到所有DDLog語句。 
5.如果您將日誌級別設定為 LOG_LEVEL_OFF,你將不會看到任何DDLog語句。

那麼我在哪裡設定日誌級別呢,在整個專案中我只能使用一個日誌級別嗎?

當然不是,我們都知道正如除錯或者新增新特性,如果你想詳細紀錄目前正在做的那部分,Lumberjack框 架提供了對每個檔案的除錯控制,你僅可以修改編輯中的檔案的日誌級別。

(註釋:當然還有許多其他高階選項,比如全球日誌級別,Xcode的每個配置級別,每個logger級別等,我們將在另一篇文章中講到)。

以下是如何轉換你的日誌語句:

<code class="hljs objectivec has-numbering" style="display: block; padding: 0px; background-color: transparent; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background-position: initial initial; background-repeat: initial initial;"><span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// CONVERT FROM THIS </span>

<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">#import <span class="hljs-title" style="box-sizing: border-box;">"Sprocket.h"</span> </span>

<span class="hljs-class" style="box-sizing: border-box;"><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">@implementation</span> <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">Sprocket</span> </span>

- (<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">void</span>)someMethod 
{ 
    <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">NSLog</span>(@<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"Meet George Jetson"</span>); 
} 

<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">@end</span> 

<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">// TO THIS </span>

<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">#import <span class="hljs-title" style="box-sizing: border-box;">"Sprocket.h"</span> </span>
<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">#import <span class="hljs-title" style="box-sizing: border-box;">"DDLog.h"</span> </span>

<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">static</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">const</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">int</span> ddLogLevel = LOG_LEVEL_VERBOSE; 

<span class="hljs-class" style="box-sizing: border-box;"><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">@implementation</span> <span class="hljs-title" style="box-sizing: border-box; color: rgb(102, 0, 102);">Sprocket</span> </span>

- (<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">void</span>)someMethod 
{ 
    DDLogVerbose(@<span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"Meet George Jetson"</span>); 
} 

<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">@end</span> 
</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li><li style="box-sizing: border-box; padding: 0px 5px;">17</li><li style="box-sizing: border-box; padding: 0px 5px;">18</li><li style="box-sizing: border-box; padding: 0px 5px;">19</li><li style="box-sizing: border-box; padding: 0px 5px;">20</li><li style="box-sizing: border-box; padding: 0px 5px;">21</li><li style="box-sizing: border-box; padding: 0px 5px;">22</li><li style="box-sizing: border-box; padding: 0px 5px;">23</li><li style="box-sizing: border-box; padding: 0px 5px;">24</li><li style="box-sizing: border-box; padding: 0px 5px;">25</li><li style="box-sizing: border-box; padding: 0px 5px;">26</li><li style="box-sizing: border-box; padding: 0px 5px;">27</li><li style="box-sizing: border-box; padding: 0px 5px;">28</li><li style="box-sizing: border-box; padding: 0px 5px;">29</li></ul>

注意日誌級別宣告為常量,這意味著這意味著日誌級別閾值以上的DDLog語句都將編譯到你的專案中。

自動引用計數(ARC) 
最新版本的Lumberjack使用ARC。如果你的專案沒有使用ARC,你可以在ARC頁面學習如何在Xcode中像ARC一樣正確地標記Lumberjack檔案。

相關推薦

iOSDDLog列印日誌

DDLog優點 快速  在大多數用例中,Lumberjack比NSLog快了一個數量級。 簡單  當應用程式啟動時,只需一行加單的程式碼就可配置Lumberjack。然後用DDLog語句簡單地取代NSLog語句。  根據你需要的功能新增不同的Loger,後面會介紹各

iOS 獲取崩潰日誌

為了更好的維護iosAPP,處理程式崩潰是必需要做的,那麼如何收集使用者使用時出現的崩潰呢,基本的方法如下:1.上傳appStore的app,可以通過iTunes Stroe獲取2.利用Xcode獲取。3. Crashlytics,Hockeyapp ,友盟,Bugly 等等

Spring Boot 學習路——4 AOP註解方式實現列印日誌

前言:據XX統計,四分之一的程式碼都是日誌有關,日誌對於定位和解決問題尤為重要,以前公司的編碼規範中要求介面必須在日誌中記錄入參和返回值以及關鍵程式碼,引數部分完全可以用Spring的AOP——面向切面來實現。什麼叫AOP?百度:AOP(Aspect Oriented Pro

Python示例程式碼列印日誌檔案

         在應用程式中,日誌列印是個必不可少的模組,本文演示了一個簡單的log日誌檔案列印的模型,在不考慮效率的場景中,可以使用該模組列印日誌資訊。        日誌的列印格式可以描述如下

Spring Boot 學習路——4.1 AOP註解方式實現列印日誌 詳解

以下內容轉自:https://www.cnblogs.com/lixiang1993/p/7447853.html1.宣告一個切面類,並把這個切面類加入到IOC容器中@Component@Aspectpublic class LogAspect{    @Pointcut(v

iOS 巨集定義~log(列印日誌)

//聯絡人:石虎  QQ: 1224614774暱稱:嗡嘛呢叭咪哄 一、列印日誌巨集 // 直接替換 #ifdef DEBUG #define NSLog(...) NSLog(_

Android NDK學習:Eclipse配置NDK環境及列印日誌

     上一篇部落格Android NDK開發學習:我的第一個NDK專案雖然是用Eclipse開發,但是在編譯專案和執行專案時,都用到了CMD視窗命令,包括javah及ndk-build等命令。如果Eclipse工具可以直接進行編譯NDK專案,不用來回切換Eclipse

企業實戰切面程式設計《統一列印日誌

前言 面向切面程式設計是spring裡一種很不錯的程式設計思想,簡單來講就是可以將一段功能程式碼在程式執行時,動態地將該段程式碼切入到目標方法前或後插入去執行,這種方式可以實現程式碼的可插拔性,之前我們在攔截器實戰篇中說過的攔截器其實就是切面程式設計的一種實現

Linux rsyslog+LogAnalyzer 日誌收集系統

windows 服務器 應用程序 數據庫 規劃圖 一、LogAnalyzer介紹  LogAnalyzer工具提供了一個易於使用,功能強大的前端,用於搜索,查看和分析網絡活動數據,包括系統日誌,事件日誌和其他許多日誌源。由於它只是將數據展示到我們用戶的面前,所以數據本身需要由另一個程序收集

Laravel加密解密/日誌/異常處理及自定義錯誤

文件中 例如 tom 處理器 crypt return cat 情況 而不是 一.加密解密 1.加密Crypt::encrypt($request->secret) 2.解密try {   $decrypted = Crypt::decrypt($encryptedV

貓貓學iOS 微博項目實戰(7)程序啟動新特性用UICollectionViewController實現

num warning art asc enter 部分 setimage 版本號 back 貓貓分享。必須精品 原創文章。歡迎轉載。轉載請註明:翟乃玉的博客 地址:http://blog.csdn.net/u013357243 一:效果 這

貓貓學iOS 微博項目實戰(2)微博主框架-自己定義導航控制器NavigationController

點擊狀態 reat obj mar all func 返回 mutable point 貓貓分享,必須精品 原創文章。歡迎轉載。轉載請註明:翟乃玉的博客 地址:viewmode=contents">http://blog.csdn.net/u0133

iOS 接入新浪微博 SDK(微信支付) 的坑(registerApp 的問題)

com .net symbols object type lan creat manager -o 最近在做一個 iOS 的 cocos2d-x 項目接入新浪微博 SDK 的時候被“坑”了,最後終於順利的解決了。發現網上也有不少人遇到一樣的問題,但是能找到的數量有限的解決辦

iOS 符號化崩潰日誌

term 崩潰 neo 文件 ica evel xcode 符號 ati 1、獲取一下三個文件 1. crash報告(.crash文件) 2. 符號文件 (.dsymb文件) 3. 應用程序文件 (appName.app文件,把IPA文件後綴改為zip,然後解壓,Pay

python打印日誌logging

gin print 單打 imp inf 多參數 level 簡單 pytho 1 import logging 2 3 4 # 簡單打印日誌舉例 5 logging.basicConfig(level=logging.DEBUG) # 設置日誌級別,

貓貓學iOS小知識iOS啟動動畫_Launch Screen的運用

ges pri rac post rip length pen 知識 hid 貓貓分享,必須精品 原創文章。歡迎轉載。轉載請註明:翟乃玉的博客 地址:http://blog.csdn.net/u013357243?viewmode=contents

Net分布式系統七:日誌采集系統(1)

高並發 log4 並發 自動化 發送 高可用性 微信 預警 div   日誌對大型應用系統或者平臺尤其重要,系統日誌采集、分析是系統運維、維護及用戶分析的基礎。 一、系統日誌分類   一般系統日誌可分為三大類:   1、用戶行為日誌:通過采集系統用戶使用系統過程中,一

Net分布式系統七:日誌采集系統(1)(轉)

常見 數據抽取 htm elastics nbsp 調用 res 化運維 分布式系統 http://www.cnblogs.com/Andon_liu/p/7508107.html 日誌對大型應用系統或者平臺尤其重要,系統日誌采集、分析是系統運維、維護及用戶分析的基礎。

ASP.NET Core學習三 NLog日誌

width itl .com 添加引用 manage skip mono cas ans 上一篇簡單介紹了日誌的使用方法,也僅僅是用來做下學習,更何況只能在console輸出。 NLog已是日誌庫的一員大佬,使用也簡單方便,本文介紹的環境是居於.NET CORE 2.0

iOSiOS11、iPhone X、Xcode9 適配指南

rect 可見 器) 直接 tabbar enter home 發生 任務管理 更新iOS11後,發現有些地方需要做適配,整理後按照優先級分為以下三類: 1.單純升級iOS11後造成的變化; 2.Xcode9 打包後造成的變化; 3.iPhoneX的適配 一、單純升級iOS