前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >iOS-创建自己的日志系统

iOS-创建自己的日志系统

作者头像
周希
发布2019-10-15 01:37:23
1.8K0
发布2019-10-15 01:37:23
举报
文章被收录于专栏:APP自动化测试APP自动化测试

今天说说怎么创建自己的日志系统

先看下Xcode自己的日志(这里说的NSLog)

系统自带的NSLog打印的信息只有简单的 时间 / 项目名称 / 打印内容

内容比较简单, 很难做分类管理和写入文件 或者上传等等.

今天我们借用CocoaLumberjack 来自定义自己的日志系统, 最终实现的效果为:

#1. Log信息分类

#2. 时间

#3. 产生log的类

#4. 产生log所在方法名

#5. 代码所在行

#6. log写入文件

最后并实现log上传给后台服务器

好了, 下面来说说怎么实现的

首先我们先看下CocoaLumberjack的基本用法

Pod导入

代码语言:javascript
复制
pod 'CocoaLumberjack'

新建pch文件, 并添加:

代码语言:javascript
复制
#import <CocoaLumberjack/CocoaLumberjack.h>
static const DDLogLevel ddLogLevel = DDLogLevelDebug;

ddLogLevel可依照需要设置为:

DDLogLevelError / DDLogLevelWarning / DDLogLevelInfo / DDLogDebug / DDLogLevelOff

如果设置为Debug级别, 则 DDLogLevelError / DDLogLevelWarning / DDLogLevelInfo / DDLogLevelDebug都能产生日志

Info级别, 则DDLogLevelError / DDLogLevelWarning / DDLogLevelInfo都能产生日志, DDlogLevelDebug不能产生日志 也不能显示在xcode console

往前依次类推,

DDLogLevelOff级别是都不显示也不产生日志

做完以上两个步骤就完成的前面的配置工作了

然后参照官方的代码就可以直接用了:

代码语言:javascript
复制
[DDLog addLogger:[DDTTYLogger sharedInstance]]; // TTY = Xcode console
[DDLog addLogger:[DDASLLogger sharedInstance]]; // ASL = Apple System Logs

DDFileLogger *fileLogger = [[DDFileLogger alloc] init]; // File Logger
fileLogger.rollingFrequency = 60 * 60 * 24; // 24 hour rolling
fileLogger.logFileManager.maximumNumberOfLogFiles = 7;
[DDLog addLogger:fileLogger];

...

DDLogVerbose(@"Verbose");
DDLogDebug(@"Debug");
DDLogInfo(@"Info");
DDLogWarn(@"Warn");
DDLogError(@"Error");

但这样只能打印基本的只有Verbose / Debug等内容的信息

这里我们需要定义自己的样式, 就是要自己定义DDFileLogger的logFileManager

直接上代码吧:

代码语言:javascript
复制
#import <Foundation/Foundation.h>

@interface MyCustomFormatter : NSObject <DDLogFormatter> {
    
    int loggerCount;
    NSDateFormatter *threadUnsafeDateFormatter;
}

@end
代码语言:javascript
复制
#import "MyCustomFormatter.h"

@implementation MyCustomFormatter

- (id)init {
    
    if((self = [super init])) {
        
        threadUnsafeDateFormatter = [[NSDateFormatter alloc] init];
        [threadUnsafeDateFormatter setDateFormat:@"yyyy/MM/dd HH:mm:ss:SSS"];
    }
    
    return self;
}

- (NSString *)formatLogMessage:(DDLogMessage *)logMessage {
    
    NSString *logLevel;
    switch (logMessage->_flag) {
        case DDLogFlagError    : logLevel = @"Error   "; break;
        case DDLogFlagWarning  : logLevel = @"Warning "; break;
        case DDLogFlagInfo     : logLevel = @"Info    "; break;
        case DDLogFlagDebug    : logLevel = @"Debug   "; break;
        default                : logLevel = @"Default "; break;
    }
    
    NSString *dateAndTime = [threadUnsafeDateFormatter stringFromDate:(logMessage->_timestamp)];
    NSString *logMsg = logMessage->_message;
    
    return [NSString stringWithFormat:@"[ %@ %@ ] \n%@", logLevel, dateAndTime, logMsg];
}

- (void)didAddToLogger:(id <DDLogger>)logger {
    
    loggerCount++;
    NSAssert(loggerCount <= 1, @"This logger isn't thread-safe");
}

- (void)willRemoveFromLogger:(id <DDLogger>)logger {
    
    loggerCount--;
}

@end

然后按照以下方法配置CocoaLumberjack

代码语言:javascript
复制
//配置CocoaLumberjack
    [DDLog addLogger:[DDASLLogger sharedInstance]]; //add log to Apple System Logs
    [DDLog addLogger:[DDTTYLogger sharedInstance]]; //add log to Xcode console
    
    [DDTTYLogger sharedInstance].logFormatter = [[MyCustomFormatter alloc] init];
    
    //自定义logfile path
    DDLogFileManagerDefault *logFileManager = \
    [[DDLogFileManagerDefault alloc] initWithLogsDirectory:[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject]];
    
    DDFileLogger *customFileLogger = [[DDFileLogger alloc] initWithLogFileManager:logFileManager];
    
    customFileLogger.rollingFrequency                       = 60 * 60 * 24;
    customFileLogger.logFileManager.maximumNumberOfLogFiles = 7;


    [DDLog addLogger:customFileLogger];

不过这样只是完成了自定义自己要的日志格式并自定义路径

还不能上线上传, 如果要上传有两种方式:

1>直接获取log文件地址, 上传

2>创建一个管理类, 来统一管理日志的关闭和启用

获取日志文件地址的方法:

customFileLogger.currentLogFileInfo.filePath;

推荐第二个

附上一个我封装好的Demo, 供大家参考.

https://github.com/zhouxihi/NVLogManager

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017-06-04 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
日志服务
日志服务(Cloud Log Service,CLS)是腾讯云提供的一站式日志服务平台,提供了从日志采集、日志存储到日志检索,图表分析、监控告警、日志投递等多项服务,协助用户通过日志来解决业务运维、服务监控、日志审计等场景问题。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档