DDLog(CocoaLumberjack)

959 阅读1分钟

DDLog(CocoaLumberjack)

CocoaLumberjackClassDiagram.png

使用

1.定义.h static const DDLogLevel ddLogLevel = DDLogLevelError;

2.实现协议DDLogFormatter 定义DDLogFormatter 使用[DDTTYLogger sharedInstance].logFormatter = [[MyCustomDDLogFormatter alloc] init];

3.AppDelegate [DDLog addLogger:[DDTTYLogger sharedInstance] withLevel:DDLogLevelAll];//DDLogLevelError [[DDTTYLogger sharedInstance] setColorsEnabled:NO]; DDFileLogger *fileLogger = [[DDFileLogger alloc] init]; fileLogger.rollingFrequency = 60 * 60 * 24; //多久创建一个新的文件 fileLogger.logFileManager.maximumNumberOfLogFiles = 2;//最大文件数量 fileLogger.maximumFileSize = 1024 * 1024 * 5; [DDLog addLogger:fileLogger];

逻辑

1.定义ddLogLevel主要是用来判断是否要打印日志 do { if(lvl & flg) LOG_MACRO(async, lvl, flg, ctx, tag, fnct, frmt, ##VA_ARGS); } while(0) 1.2withLevel主要是用来判断是否要打印日志 [DDLog addLogger:[DDTTYLogger sharedInstance] withLevel:DDLogLevelAll];//DDLogLevelError if (!(logMessage->_flag & loggerNode->_level)) { continue; }

2.DDAbstractLogger 实现协议DDLogger/ DDTTYLogger,DDFileLogger 继承DDLogger

3.DDTTYLogger 控制台打印日志 writev(STDERR_FILENO, v, 13);

4.DDFileLogger 写入日志 查找当前currentLogFileHandle 到最后面seekToEndOfFile 写入日志 4.1会开启一个timer if (_rollingFrequency > 0.0 && _currentLogFileInfo.age >= _rollingFrequency) { 根据_rollingFrequency 刷新时间来查看当前文件创建时间是否大于_rollingFrequency时间。如果是就暂停timer 设置isArchived currentLogFileInfo.isArchived = YES 4.2 创建出文件然后删除老文件,maxNumLogFiles的值 删除第maxNumLogFile个文件。