CocoaLumberjack接入实践 2022-05-07 周六

简介

对于日志,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 
#import 

// 日志级别定义
#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版本不会有。

参考文章

使用CocoaLumberjack的一些问题记录

CocoaLumberjack

你可能感兴趣的:(CocoaLumberjack接入实践 2022-05-07 周六)