iOS项目记录日志的需求
- 可以在代码上控制日志的级别,以便打印不同层级的日志
- 需要同时在控制台、文件写入
- 需要和NSLog一样的调用格式,方便替换
- 需要保证顺序写入,不能发生由于并发写入错误的问题
- 以后可以扩展输入到别的地方,比如浏览器、app内其他UI上显示日志等
- 日志文件大小限定、设定清理N天前的日志
解决思路
-
设计LogLevel,能够实现 类似LogCat的效果。预计只设计NONE、ERROR、INFO、DEBUG。分别表示 - NONE 什么都不打印
- ERROR 只打印ERROR
- INFO 打印INFO和ERROR
- DEBUG 全部打印
-
利用iOS的本地广播通知的功能,在打印日志的接口里,将最终的字符串从广播发出去。在不同的文件日志类、控制台类、其他UI界面注册此通知,分别处理字符串。这同时解决了扩展性的问题。 -
实现OC语言风格的可变参数 以及 C语言风格的日志打印接口 -
本地广播,在接收的对象处理的时候天然就是顺序的了,不会有多线程的竞争问题 -
每次写完文件日志,检查日志文件大小,超过重新创建新文件。每次启动对象检查是否有过期文件,有则删除
知识点
- 本地广播的发送API
- 可变参数方法:写文件 vfprintf、控制台 vprintf
- NSString 转 char*
- GCD串行队列
- OC类实现类似NSLog风格的API,并且也能够被C语言调用
- 日志存储路径 Document 以及查询日志文件的修改日期、大小等API
实现代码:(待续)
|