您的位置:首页 > 编程语言 > C语言/C++

C/C++ 实现类似Android JNI log库的效果

2017-12-21 15:24 429 查看

封装log

C标准库提供了
printf
作为日志输出函数

C++中stl提供了
std::cout
作为日志输出函数

当然这两种接口使用起来都不太方便

printf函数太长 而且日志没有分级别

cout使用起来则更为繁琐

std::cout << "test" << std::endl;


封装printf

常见的封装方法是这样的:

#define log(fmt,...)\
do {\
printf(fmt, ##__VA_ARGS__);\
} while(0)


这样封装后 printf可变参数的优点被保留下来 同时也不需要那么长的函数名

Android SDK中的做法

在Android中使用JNI接口时

可以这么使用日志 Log.i(“tag”, “test”);

类似的接口还有Log.d(),Log.e()

后缀的i e d代表的是日志的级别

i是info e是error d是debug

同样的 通过几个宏定义可以实现这种效果

#define Log.i(fmt,...)\
do {\
printf("info: ");\
printf(fmt, ##__VA_ARGS__);\
printf("\n");\
} while(0)
#define Log.d(fmt,...)\
do {\
printf("debug: ");\
printf(fmt, ##__VA_ARGS__);\
printf("\n");\
} while(0)
#define Log.e(fmt,...)\
do {\
printf("error: ");\
printf(fmt, ##__VA_ARGS__);\
printf("\n");\
} while(0)


这里只是简单的举例

工程应用中还可以加上其他效果

比如 利用 LINE_ 和FILE这些宏 定位log文件位置等等

还可以根据log级别 加上输出log的颜色来区分不同级别的log
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐