iOS下日志记录

iOS开发中,一般大家都会自定义一个DLog的宏来代替NSLog,用来控制Release下的Log输出。 但是有以下几个弊端:

  • 没有日志分级。做过Android的都知道,Android可以分为5级,ErrorWarningInfoDebugVerbose
  • 日志没法记录到文件,Release版本无法通过Log日志定位问题。 所以今天就推荐一个第三方库,CocoaLumberjack,完全满足以上需求,不但如此,还支持以下需求:
  • 自定义Log文件的文件数、有效期、缓存大小
fileLogger.logFileManager.maximumNumberOfLogFiles = 20;
fileLogger.maximumFileSize = 1024 * 1024 * 5;
fileLogger.rollingFrequency = 60 * 60 * 24;
复制代码

具体使用大家还是看看GitHub上的介绍。 现在说一下集成中遇到的问题: 1 . 可以自定义输出Log的格式,需要实现DDLogFormatter协议,下面提供一个示例:

- (NSString *)formatLogMessage:(DDLogMessage *)logMessage {
    
    NSString *logLevel = nil;
    switch (logMessage.flag) {
        case DDLogFlagError:
            logLevel = @"[E]";
            break;
        case DDLogFlagWarning:
            logLevel = @"[W]";
            break;
        case DDLogFlagInfo:
            logLevel = @"[I]";
            break;
        case DDLogFlagDebug:
            logLevel = @"[D]";
            break;
        default:
            logLevel = @"[V]";
            break;
    }
    
    NSString *formatString = [NSString stringWithFormat:@"%@ %@ [@%zd] %@ %@", [logMessage.timestamp descriptionWithLocale:[NSLocale currentLocale]], logLevel, logMessage.line, logMessage.function, logMessage.message];
    return formatString;
}
复制代码

2 . 在单步调试时会发现,很多级别的日志不会立即显示到控制台中。在DDLogMacros.h中,我们可以看到以下几个宏定义:

#define DDLogError(frmt, ...)   LOG_MAYBE(NO,                LOG_LEVEL_DEF, DDLogFlagError,   0, nil, __PRETTY_FUNCTION__, frmt, ##__VA_ARGS__)
#define DDLogWarn(frmt, ...)    LOG_MAYBE(LOG_ASYNC_ENABLED, LOG_LEVEL_DEF, DDLogFlagWarning, 0, nil, __PRETTY_FUNCTION__, frmt, ##__VA_ARGS__)
#define DDLogInfo(frmt, ...)    LOG_MAYBE(LOG_ASYNC_ENABLED, LOG_LEVEL_DEF, DDLogFlagInfo,    0, nil, __PRETTY_FUNCTION__, frmt, ##__VA_ARGS__)
#define DDLogDebug(frmt, ...)   LOG_MAYBE(LOG_ASYNC_ENABLED, LOG_LEVEL_DEF, DDLogFlagDebug,   0, nil, __PRETTY_FUNCTION__, frmt, ##__VA_ARGS__)
#define DDLogVerbose(frmt, ...) LOG_MAYBE(LOG_ASYNC_ENABLED, LOG_LEVEL_DEF, DDLogFlagVerbose, 0, nil, __PRETTY_FUNCTION__, frmt, ##__VA_ARGS__)
复制代码

你会发现DDLogError和其他的宏定义的第一个参数不是很一样,然后找到LOG_ASYNC_ENABLED的定义,这样就很明白了,如果你需要立即显示,把LOG_ASYNC_ENABLED的定义改为如下即可。

#ifndef LOG_ASYNC_ENABLED
    #define LOG_ASYNC_ENABLED NO
#endif
复制代码

3 . 说一下rollingFrequency这个属性,看了源码后发现,作者是根据文件的创建时间来处理的,所以就会导致这样的问题,1号15:00创建的文件,然后用到2号15:00就会重新创建一个文件,所以会导致2号的Log在15:00被分为2个文件。

如果需要更高度的自定义,可以去CocoaLumberjack主页上看一下README

<推广> 综合计算器 是一款多功能计算器,可以计算房贷、个税、年终奖、利息、BMI指数以及大小金额的计算器,再也不用下载多个计算器找来找去了。还支持实时更新贷款利率哦~。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值