使用我自己做的异步日志公有库:BITCocoaLumberjack; BITCocoaLumberjack基于CocoaLumberjack 3.4.2版本进行增强,打印文件名,函数名,日志所在文件的行数;测试加入GCD的MainDispatchQueue队列线程在后台仍旧可以运行。
BITCocoaLumberjack的使用demo。
1.增加文件:PrefixHeader.h
。
2.增加Podfile文件
source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '8.0'
use_frameworks!
inhibit_all_warnings!
target 'UseBITCocoaLumberjack' do
#自定义组件
pod 'BITCocoaLumberjack'
end
3.打开终端命令行,切换到Podfile文件所在目录下执行:pod update --verbose --no-repo-update
下载BITCocoaLumberjack组件。
4.在PrefixHeader.h文件中增加如下代码:
#ifndef PrefixHeader_h
#define PrefixHeader_h
#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
//异步日志处理和测试环境,现网环境切换宏
#ifndef TEST_XCODE_COLORS
//当发布正式服务器时需要置为0,就能关闭日志系统
#define TEST_XCODE_COLORS 1
#else
#endif
#if TEST_XCODE_COLORS
#import <BITCocoaLumberjack/CocoaLumberjack.h>
#import <BITCocoaLumberjack/CocoaLumberjackMacro.h>
static const int ddLogLevel = DDLogLevelVerbose;
#define NSLog(...) NSLog(__VA_ARGS__)
#else
#import <BITCocoaLumberjack/CocoaLumberjackNoLogsMacro.h>
#define NSLog(...)
#endif
#endif /* PrefixHeader_h */
5.在AppDelegate.m文件修改增加如下代码:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.
[self configDDLog];
return YES;
}
- (void)configDDLog {
#if TEST_XCODE_COLORS
[DDLog addLogger:[DDTTYLogger sharedInstance]];
[DDLog addLogger:[DDASLLogger sharedInstance]];
[[DDTTYLogger sharedInstance] setColorsEnabled:YES];
DDFileLogger *fileLogger = [[DDFileLogger alloc] init];
fileLogger.rollingFrequency = 60 * 60 * 24 * 3; // 24 hour rolling
fileLogger.logFileManager.maximumNumberOfLogFiles = 100;
fileLogger.logFileManager.logFilesDiskQuota = 10 * 1024 * 1024;//20 * 1024 * 1024; // 20 MB
[DDLog addLogger:fileLogger];
#if TARGET_OS_IPHONE
UIColor *pink = [UIColor colorWithRed:(255/255.0) green:(58/255.0) blue:(159/255.0) alpha:1.0];
#else
NSColor *pink = [NSColor colorWithCalibratedRed:(255/255.0) green:(58/255.0) blue:(159/255.0) alpha:1.0];
#endif
[[DDTTYLogger sharedInstance] setForegroundColor:pink backgroundColor:nil forFlag:DDLogFlagInfo];
#if TARGET_OS_IPHONE
UIColor *gray = [UIColor grayColor];
#else
NSColor *gray = [NSColor grayColor];
#endif
//注意:新版本的CocoaLumberjack的下面日志级别要设置为DDLogFlagVerbose,若设置为DDLogFlagInfo,那么DDLogFlagVerbose级别的日志不写入日志文件
[[DDTTYLogger sharedInstance] setForegroundColor:pink backgroundColor:nil forFlag:DDLogFlagVerbose];
FLDDLogError(@"TEST DDLogError");
FLDDLogWarn(@"TEST DDLogWarn");
FLDDLogInfo(@"TEST DDLogInfo)");
FLDDLogDebug(@"TEST DDLogDebug");
FLDDLogVerbose(@"TEST DDLogVerbose");
#endif
}
6.在其它页面你想打印的日志地方打印日志,示例如下:
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
[self test];
}
//测试加入GCD的MainDispatchQueue队列里的线程在后台仍旧可以运行三分钟
-(void)test
{
FLDDLogDebug(@"测试加入GCD的MainDispatchQueue队列线程在后台仍旧可以运行");
dispatch_async(dispatch_get_main_queue(), ^{
for(NSInteger i = 0; ; i++)
{
sleep(1);
FLDDLogDebug(@"test:%ld", (long)i);
}
});
}
7.在Info.plist增加一行Application supports iTunes file sharing为YES。
当然测试版本设置为YES,正式版本把它设置为NO,关闭日志功能。当然你可以继续打印日志,只是提高它的打印级别。可以上传日志到苹果日志系统。
DDLog(整个框架的基础)
DDASLLogger(发送日志语句到苹果的日志系统,以便它们显示在Console.app上)
DDTTYLoyger(发送日志语句到Xcode控制台,如果可用)
DDFIleLoger(把日志语句发送至文件)
//使用如下:
[DDLog addLogger:[DDASLLogger sharedInstance]];
[DDLog addLogger:[DDASLLogger sharedInstance]];
[DDLog addLogger:[DDTTYLogger sharedInstance]]; 或[[DDTTYLogger sharedInstance] setColorsEnabled:YES];
注意:新版本的CocoaLumberjack的下面日志级别要设置为DDLogFlagVerbose,若设置为DDLogFlagInfo,那么DDLogFlagVerbose级别的日志不写入日志文件。