DDLog--CocoaLumberjack framework 自定義日誌管理
github英文連結:
入門翻譯全文:
想要學習這個框架只需要三個步驟
1 把框架新增到你的應用程式
2 配置框架
3 用Lumberjack輸入代替你的NSLog輸出
下面詳細介紹每個步驟
1 把框架新增到你的應用程式
主要新增的檔案有以下四個
@ DDLog(基礎框架)
@ DDASLLogger(傳送到蘋果的日誌系統,他們顯示到控制檯上),個人建議沒有必要
@DDTTYLoyger (傳送日誌語句到控制檯)
@DDFIleLoger (把輸出資訊寫進檔案中)
DDLog是強制性的,其餘的都是可選的,這取決於你如何打算使用這個框架,如果你不打算紀錄到一個檔案,你可以跳過DDFileLogger,或者你想跳過ASl 在你的愛好快速紀錄日誌,你可以跳過DDASLLoger
2 配置框架
第一件事情你要做的是在你applicationDidFinishLaunching方法中配置(通常是這麼做)新增你所需要的檔案
下面幾行程式碼是在開始的時候所需要的
[DDLog addLogger:[DDASLLogger sharedInstance]];
[DDLog addLogger:[DDTTYLogger sharedInstance]];
上面兩行程式碼添加了一對logging框架,換句話說,你的日誌語句已經能夠傳送到控制檯,(就像一個正常的NSLog)
這個框架的好處之一就是它的靈活性,如果你還想要你的日誌語句寫入到一個檔案中,你可以新增和配置fileLogger
fileLogger = [[DDFileLogger alloc] init];
fileLogger.rollingFrequency = 60 * 60 * 24; // 24 hour rolling
fileLogger.logFileManager.maximumNumberOfLogFiles = 7;
[DDLog addLogger:fileLogger];
上面的程式碼是告訴應用程式保持一週的日誌檔案系統
3 用Lumberjack輸入代替你的NSLog輸出
DDLog的標頭檔案定義了巨集,您將使用來取代你的NSLog語句。你可以參考下面的語句來代替你的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有這完全相同的語法,在使用的時候不會有人和的障礙。
DDLog預設有四種級別的日誌,你所要做的就是決定使用那種日誌級別來列印你的日誌語句,它們分別是:
@DDlogError
@DDlogWarn
@DDlogInfo
@DDlogVerbose
註釋:你也可以自定義級別,你可以新增上更細微的控制代替系統四個簡單的等級。
當然你選擇那個NSLog語句,這取決於你的訊息的嚴重程度。
下面的這些不同的日誌等級也許正有你所需要的
如果你設定的日誌級別為 LOG_LEVEL_ERROR那麼你只會看到DDlogError語句的輸出。
如果你將日誌的級別設定為LOG_LEVEL_WARN那麼你只會看到DDLogError和DDLogWarn語句。
如果您將日誌級別設定為 LOG_LEVEL_INFO,您將看到error、Warn和資訊報表。
如果您將日誌級別設定為LOG_LEVEL_VERBOSE,您將看到所有DDLog語句。
如果您將日誌級別設定為 LOG_LEVEL_OFF,你不會看到任何DDLog語句。
那麼我在哪裡設定日誌級別?我必須使用一個日誌級別為我的整個專案嗎?
當然不是,我們都知道它就像除錯或者新增新的特性,你想詳細紀錄你目前正在除錯的部分,這個框架提供了對每個檔案的除錯,所以你可以修改日誌級別在你正在編輯的檔案中。
註釋:(當然還有許多其他高階選項,比如全球日誌級別,每xcode配置水平,每記錄器級別等。但是我們會去,在另一篇文章)。
下面是詳細的如何在你的程式碼中運用這個框架
// CONVERT FROM THIS
#import "Sprocket.h"
@implementation Sprocket
- (void)someMethod
{
NSLog(@"Meet George Jetson");
}
// TO THIS
#import "Sprocket.h"
#import "DDLog.h"
static const int ddLogLevel = LOG_LEVEL_VERBOSE;
@implementation Sprocket
- (void)someMethod
{
DDLogVerbose(@"Meet George Jetson");
}
@end
注意日誌級別宣告為常數,這意味著DDLog以上宣告的日誌級別將被認為預設值,編譯到你的專案中。(當你的編譯器優化開啟的時候,那就是你的釋出版本)
好,基本的DDlog框架就是這些,希望對你有所幫助,下一篇翻譯更深的知識。
深入篇:
也許看了上面的簡單介紹,不知道如何去設定列印的級別,其實很簡單,我的做法是構造一個頭檔案,因為我們會在很多的檔案中用到這個級別設定,所以我們單獨列出來,那個檔案用只需要去引用標頭檔案即可
在標頭檔案中寫入如下程式碼
#import "DDLog.h"
#import "DDTTYLogger.h"
#import "DDASLLogger.h"
#import "DDFileLogger.h"
#if DEBUG
static const int ddLogLevel = LOG_LEVEL_VERBOSE;
#else
static const int ddLogLevel = LOG_LEVEL_INFO;
#endif
其中if中是除錯的時候的級別,下面else的級別是釋出版本的時候的日誌的級別,例如,我們希望向伺服器丟擲一些異常,那麼我們就可以把debug級別設為LOG_LEVEL_VERBOSE 把釋出版本的日誌級別設為LOG_LEVEL_ERROR,這樣在釋出的時候,應用程式只會把用DDLogError輸出的日誌,寫到檔案中,檔案在應用程式的沙盒路徑的Caches的Logs資料夾中,我們要做的就是把這個資料夾發到伺服器上。釋出的方法如下
/**
* 獲得系統日誌的路徑
**/
-(NSArray*)getLogPath
{
NSString *docPath = [NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES) objectAtIndex:0];
NSString * logPath = [docPath stringByAppendingPathComponent:@"Caches"];
logPath = [logPath stringByAppendingPathComponent:@"Logs"];
NSFileManager * fileManger = [NSFileManager defaultManager];
NSError * error = nil;
NSArray * fileList = [[NSArray alloc]init];
fileList = [fileManger contentsOfDirectoryAtPath:logPath error:&error];
NSMutableArray * listArray = [[NSMutableArray alloc]init];
for (NSString * oneLogPath in fileList)
{
if([oneLogPath characterAtIndex:0 ] == 'l')
{
NSString * truePath = [logPath stringByAppendingPathComponent:oneLogPath];
[listArray addObject:truePath];
}
}
return listArray;
}