iOS下日志记录
来源:互联网 发布:贵州广电网络网上缴费 编辑:程序博客网 时间:2024/06/08 18:16
iOS
开发中,一般大家都会自定义一个DLog
的宏来代替NSLog
,用来控制Release
下的Log
输出。
但是有以下几个弊端:
* 没有日志分级。做过Android
的都知道,Android
可以分为5级,Error
、Warning
、Info
、Debug
、Verbose
。
* 日志没法记录到文件,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
。
扫码关注公众号
阅读全文
0 0
- iOS下日志记录
- IOS日志记录
- IOS日志记录
- iOS 记录crash日志
- 记录下学习日志
- IOS开发日志记录 - 尺寸
- IOS开发日志记录 - 推送
- windows下 日志记录 Log
- windows下 日志记录 Log
- SSM下log4j2 记录日志
- 日志记录 PHP下往linux目录下写日志
- iOS开发中善用日志记录工具
- iOS开发中善用日志记录工具
- iOS运用fabric记录crash日志过程
- iOS 文件操作,记录log日志。
- VS2010下的日志记录函数
- LINUX下C语言写日志记录
- Linux下开发程序记录日志功能
- linux常用命令
- rabbitmq集群部署及配置
- 微信小程序开发(2)---APP()函数
- JMeter入门教程
- GKSpheresNoiseSource
- iOS下日志记录
- inno setup compiler 汉化文件
- 关于Spring核心原理Aop的几种实现方式
- Brandon的IT简史——Apple(苹果公司)
- Python赋值、浅拷贝、深拷贝
- Windows下使用VisualSVN Server搭建SVN服务器
- java集合类总结
- java 继承的执行顺序
- 在Centos6.9上快速搭建基于Beego和Swagger的RESTful API