前言:
一个好的库(对开发者友好),一定有一个好的日志系统,可以帮助developer快速的定位问题。
今天我们对比一下FFmpeg和SDL两个开源库开放的日志回调接口,看看各自的优缺点,对实现一个我们自己的lib也是有益的。
多说无益,直接开始
接口一览表
红色部分是日志回调的基本接口,SDL get接口较为丰富
ffmpeg多了一些日志输出到文件的接口。之所以多了这些接口,是因为ffmpeg既可以作为库使用,也可以作为进程存在。SDL仅作为lib使用
日志等级/类别
SDL支持针对不同的日志类别设置日志级别,SDL自己抽象出来
SDL_LOG_CATEGORY_APPLICATION,
SDL_LOG_CATEGORY_ERROR,
SDL_LOG_CATEGORY_ASSERT,
SDL_LOG_CATEGORY_SYSTEM,
SDL_LOG_CATEGORY_AUDIO,
SDL_LOG_CATEGORY_VIDEO,
SDL_LOG_CATEGORY_RENDER,
SDL_LOG_CATEGORY_INPUT,
SDL_LOG_CATEGORY_TEST
这些日志的类别,并在记录日志时选择一类进行归类。简单总结就是最后这条日志是由两个条件决定是否会输出的,一个是日志的类别,一个是日志的优先级,两者同时作用后&条件生效
比如,可以设置VIDEO的info级别日志进行输出,但是AUDIO的info级别不输出。
回调的参数
ffmpeg不支持回调用户自定义的参数,默认是ffmpeg进行填充一个AVClass*的参数回调给上层。ffmpeg可以将format回调给上层应用,上层应用可以做过滤等操作
SDL允许用户自定义一个void *userdata,并且在回调的时候传给上层,SDL回调给上层的log只有char*格式,不支持上层用户直接根据format再加工
思考
作为一个lib时,一般不会有主动输出日志到terminal或者到文件的操作。因为被调用时,仅通过lib自己的操作日志不能很方便的反映出实际业务的流程,需要配合调用放自己的log进行分析。上层应用通过回调lib日志进行log存储
丰富lib API函数返回值,让上层应用直观通过返回值可以清楚的了解到错误的原因。
↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓