最近一直在做sdk的項目,用戶提出了一個需求,需要屏蔽sdk內部的日志輸出。由於sdk內部的日志是為了調試,如果屏蔽了肯定不方便,所以研究了一下日志輸出開關的功能。
在這里介紹兩種實現方案:一種方案是使用NSUserDefaults,一種方案是使用自定義類來控制。
第一種方案:NSUserDefaults
這種方案比較簡單,主要使用NSUserDefaults來存儲日志輸出的狀態。直接上代碼:
// 日志狀態獲取 [[[NSUserDefaults standardUserDefaults] valueForKey:@"kLogEnable"] boolValue]; // 日志狀態修改 NSUserDefaults *userD = [NSUserDefaults standardUserDefaults]; [userD setValue:@(s.isOn) forKey:@"kLogEnable"]; [userD synchronize];
然后在.pch文件中添加宏來進行判斷輸出日志功能:
#define customLogEnable [[[NSUserDefaults standardUserDefaults] valueForKey:@"kLogEnable"] boolValue] #define FirstMethodLog(format,...) if(customLogEnable) {\ NSLog((@"%s[%d]" format), __FUNCTION__, __LINE__, ##__VA_ARGS__);\ } else {}
這樣在其他地方使用FirstMethodLog方法來輸出日志,就可以實現控制日志輸出的功能。
第二種方案:自定義日志輸出管理類CustomLogManager
首先在.h文件中提供幾個方法:
// 設置日志輸出狀態 + (void)setLogEnable:(BOOL)enable; // 獲取日志輸出狀態 + (BOOL)getLogEnable; // 日志輸出方法 + (void)customLogWithFunction:(const char *)function lineNumber:(int)lineNumber formatString:(NSString *)formatString;
然后在.m文件中,設置靜態變量來存儲日志輸出狀態值
// 默認值為NO static BOOL kLogEnable = NO;
類方法的實現:
+ (void)setLogEnable:(BOOL)enable { kLogEnable = enable; } + (BOOL)getLogEnable { return kLogEnable; } + (void)customLogWithFunction:(const char *)function lineNumber:(int)lineNumber formatString:(NSString *)formatString { if ([self getLogEnable]) { // 開啟了Log NSLog(@"%s[%d]%@", function, lineNumber, formatString); } }
最后添加宏定義
#define SecondMethodLog(format,...) [CutomLogManager customLogWithFunction:__FUNCTION__ lineNumber:__LINE__ formatString:[NSString stringWithFormat:format, ##__VA_ARGS__]]
這樣在其他地方使用SecondMethodLog方法來輸出日志,就可以控制日志輸出了。
在這里附上Demo:CustomLogDemo
