簡介
對于日志,NSLog大多數情況下是夠用的。
不過,如果想要留存本地日志文件,那么就可以考慮使用CocoaLumberjack
集成
使用CocoaPods,很方便
pod 'CocoaLumberjack'
使用
問題1: ddLogLevel的定義
很多網絡文章介紹如下定義方式:
#ifdef DEBUG
static const int ddLogLevel = LOG_LEVEL_VERBOSE;
#else
static const int ddLogLevel = LOG_LEVEL_WARN;
#endif
只是現在改了,LOG_LEVEL_VERBOSE會編譯不過,需要修改為如下方式:
// 日志級別定義
#ifdef DEBUG
static const DDLogLevel ddLogLevel = DDLogLevelVerbose;
#else
static const DDLogLevel ddLogLevel = DDLogLevelError;
#endif
問題2:DDASLLogger,DDTTYLogger已經廢棄
很多網絡文章會提供如下使用方式:
[DDLog addLogger:[DDASLLogger sharedInstance]];
[DDLog addLogger:[DDTTYLogger sharedInstance]];
[[DDTTYLogger sharedInstance] setColorsEnabled:YES];
現在已經改了,只要用以下一句就可以了:
[DDLog addLogger:[DDOSLogger sharedInstance]]; // Uses os_log
至于顏色插件之類的,沒有必要。
封裝
直接在pch文件和APPDelegate中添加,當然是沒問題的。只是這些地方會加很多其他的東西,所以加了一層封裝:
- 頭文件
//
// PDALog.h
// PandaPhoto
//
// Created by zxs on 2022/5/7.
//
#import <Foundation/Foundation.h>
#import <CocoaLumberjack/CocoaLumberjack.h>
// 日志級別定義
#ifdef DEBUG
static const DDLogLevel ddLogLevel = DDLogLevelVerbose;
#else
static const DDLogLevel ddLogLevel = DDLogLevelError;
#endif
// 宏定義,改個名字
#define PDALogError DDLogError
#define PDALogWarn DDLogWarn
#define PDALogInfo DDLogInfo
#define PDALogDebug DDLogDebug
#define PDALogVerbose DDLogVerbose
NS_ASSUME_NONNULL_BEGIN
@interface PDALog : NSObject
// 創建日志對象
+ (void)setup;
@end
NS_ASSUME_NONNULL_END
- 執行文件
//
// PDALog.m
// PandaPhoto
//
// Created by zxs on 2022/5/7.
//
#import "PDALog.h"
@implementation PDALog
// 創建日志對象
+ (void)setup {
[DDLog addLogger:[DDOSLogger sharedInstance]]; // Uses os_log
DDFileLogger *fileLogger = [[DDFileLogger alloc] init]; // File Logger
fileLogger.rollingFrequency = 60 * 60 * 24; // 24 hour rolling
fileLogger.logFileManager.maximumNumberOfLogFiles = 7;
[DDLog addLogger:fileLogger];
}
@end
這樣的話,具體的調用場所就可以用一句話了,簡潔一點。
使用的話,DDLogXXX和PDALogXXX是等價的。用上自己工程的前綴,而不是固定的DD,感覺上順眼一點罷了。
一句話調用
- pch文件中
// 日志
#import "PDALog.h"
- AppDelegate中
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.
// 日志
[PDALog setup];
return YES;
}
這兩個地方都是公共場合,經過封裝之后,看上去簡潔一點。
使用的例子:
PDALogError(@"翻譯接口返回內容JSON解析失敗");
DDLogError(@"翻譯接口返回內容JSON解析失敗");
NSLog(@"翻譯接口返回內容JSON解析失敗");
看上去使用方式一模一樣。
只是Error級別的盡量控制一下,release版本也會有的。其他低級別的隨便寫,release版本不會有。