iOS項目之使用開關控制日志輸出的功能


  最近一直在做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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM