简介
对于日志,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版本不会有。