CocoaLumberjack framework 自定義日誌管理

github英文連接: git

https://github.com/robbiehanson/CocoaLumberjack/wiki/GettingStarted github

入門翻譯全文: xcode

 想要學習這個框架只須要三個步驟

  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");
}

@end

// 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框架就是這些,但願對你有所幫助,下一篇翻譯更深的知識。 服務器

深刻篇: app

也許看了上面的簡單介紹,不知道如何去設置打印的級別,其實很簡單,個人作法是構造一個頭文件,由於咱們會在不少的文件中用到這個級別設定,因此咱們單獨列出來,那個文件用只須要去引用頭文件便可
在頭文件中寫入以下代碼
#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;
    

 
} 框架

相關文章
相關標籤/搜索