注:本文是重定向日志输出到项目的其他模块,非重定向直接输出到文件。
在项目开发的时候,碰到一个很纠结的问题:因本人做的是iOS SDK层,同事做的是App层,因分工不同,在调试和修复Bug的时候需要提供明确清晰的日志。若把项目中的全部日志都输出到一个文件中,查找杂乱而繁琐,而我也只需要SDK层的日志,因此日志重定向到文件在此已不再合适(使用freopen重定向stdout、stderr输出路径即可,网上教程较多)。
因此个人根据需求分析之后,定义了2个宏:CLog、CPrintf(也可重写系统的NSLog,printf接口,在此为了不混淆系统接口和功能,自己重新定义了2个宏),再单独封装了一个单例类ZJLogSDK,提供一个代理回调给App层进行显示或保存。
#define CLog(...) [[ZJLogSDK sharedTool] sendLogStr:[NSString stringWithFormat:__VA_ARGS__]]
#define CPrintf(...) \
{\
char cLogBuf[1024] = {0}; /*只支持1024个字节的输出(可自行调节大小)*/\
snprintf((char *)cLogBuf, sizeof(cLogBuf), __VA_ARGS__); /*将格式字符串和可变参数列表保存到cLogBuf中*/\
CPrintfCallback(cLogBuf); /*此函数定义在只包含c