CocoaLumberjack是Mac和iOS上一個集快捷、簡單、強大和靈活於一身的日志框架。CocoaLumberjack類似於流行 的日志框架(如log4j),但它是專為Objective-C設計的,利用了多線程、GCD(如果可用)、無鎖原子操作Objective-C運行時的 動態特性。
快速
在大多數用例中,Lumberjack比NSLog快了一個數量級。
簡單
當應用程序啟動時,只需一行加單的代碼就可配置Lumberjack。然後用DDLog語句簡單地取代NSLog語句。 並且DDLog宏與NSLog的有完全相同的格式和語法,所以超級簡單。
強大
一個日志語句可以被發送到多個logger,意味著你可以同時記錄文件和控制台。此外,還可以創建自己的logger,將日志語句發送到網絡、數據庫或者分布式文件系統中。沒有任何限制。
靈活性
配置你自己想要的日志框架。修改每個文件的日志級別(尤其是測試時)。修改每個logger的日志級 別(詳細的控制台,但是簡潔的日志文件)。修改每個Xcode配置的日志級別。為你的應用程序定制日志級別的數量。添加自己的精細的日志。在運行時動態修 改日志級別。 選擇如何以及何時回滾你的日志文件。將日志文件上傳至中心服務器。壓縮存檔日志文件來節省硬盤空間。
當你遇到一下情況是,你可以選擇Lumberjack框架:
1.你想找到一種方式來跟蹤在程序中不斷出現的不可復制的bug;
2.你對iPhone上的簡短日志感到很失望;
3.出於支持系統和穩定性的需要,你想將應用程序升級到下一級別;
4.為你的應用程序(Mac或者iPhone)尋找企業級的日志解決方案。
如何開始使用Lumberjack框架
開始
三步開始使用CocoaLumberjack框架:
1.將Lumberjack文件添加到你的項目中;
2.配置框架;
3.將NSLog指令轉換為使用Lumberjack宏指令;
把Lumberjack框架添加到你的項目
需要添加的主要文件有四個:
1.@DDLog(整個框架的基礎)
2.@DDASLLogger(發送日志語句到蘋果的日志系統,以便它們顯示在Console.app上)
3.@DDTTYLoyger(發送日志語句到Xcode控制台,如果可用)
4.@DDFIleLoger(把日志語句發送至文件)
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默認有四種級別的日志,分別是:
1.@DDlogError
2.@DDlogWarn
3.@DDlogInfo
4.@DDlogVerbose
(注意:你也可以自定義級別以及級別名或者添加更精細的控制來代替系統四個簡單的等級。)
當然選擇哪個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級別等,我們將在另一篇文章中講到)。
以下是如何轉換你的日志語句:
// 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語句都將編譯到你的項目中。
自動引用計數(ARC)
最新版本的Lumberjack使用ARC。如果你的項目沒有使用ARC,你可以在ARC頁面學習如何在Xcode中像ARC一樣正確地標記Lumberjack文件。
更多關於Lumberjack:
Automatically use different log levels for your debug vs release builds
Tailor the log levels to suite your needs
Filter logs based on logger settings
Write your own custom formatters
Write your own custom loggers
And more...
原文:CocoaLumberjack