SDL的日志功能很简单. 首先要明确,SDL的每个日志都由两个条件决定:
category:类型,可以是如下几个:
SDL_LOG_CATEGORY_APPLICATIONSDL_LOG_CATEGORY_ERRORSDL_LOG_CATEGORY_ASSERTSDL_LOG_CATEGORY_SYSTEMSDL_LOG_CATEGORY_AUDIOSDL_LOG_CATEGORY_VIDEOSDL_LOG_CATEGORY_RENDERSDL_LOG_CATEGORY_INPUTSDL_LOG_CATEGORY_TEST测试用SDL_LOG_CATEGORY_CUSTOM用户自己定义的SDL_LOG_CATEGORY_RESERVED为了未来SDL版本的拓展使用,用户不应该占用。
可以看到这些都对应着SDL的模块,也就是按照模块信息分类的
priority:日志级别,这个用过日志库的都很熟悉了,有如下几个:
SDL_LOG_PRIORITY_VERBOSESDL_LOG_PRIORITY_DEBUGSDL_LOG_PRIORITY_INFOSDL_LOG_PRIORITY_WARNSDL_LOG_PRIORITY_ERRORSDL_LOG_PRIORITY_CRITICAL
那么优先级就是CRITICAL>ERROR>WARN>INFO>DEBUG>VERBOSE
接下来就是我们常见的日志库中的日志函数了。SDL的日志函数都是类printf格式的。有如下日志函数:
SDL_Log SDL_Log Critical/Debug/Error/Info/Verbose/Warn/Message
其中SDL_Log会默认将日志记到SDL_LOG_CATEGORY_APPLICATION,SDL_LOG_PRIORITY_INFO类别中。其他的都需要指定。
SDL_LogMessage的第一个参数是category,第二个参数是priority,可以将日志记到任意类别和优先级中。其他的就是按照优先级命名的日志函数了,第一个参数都是category。
接下来就是关于日志优先级的函数了:
SDL_LogGetPriority(int category)获得优先级SDL_LogResetPriorities()将所有category的优先级设为默认(INFO级)SDL_LogSetPriority(int category,SDL_LogPriority priority)改变优先级。SDL_LogSetAllPriority(SDL_LogPriority priority)设置所有category的日志一个优先级。
最后SDL还允许你自定义日志的输出方式。你可以给一个函数给SDL,他会按照调用你的函数来输出:
SDL_LogGetOutputFunction(SDL_LogOutputFunction* callback,void** userdata):获得当前的日志格式函数和额外数据SDL_LogSetOutputFunction(SDL_LogOutputFunction callback,void* userdata):设置日志输出格式函数,函数需要有下面的格式void SDL_LogOutputFunction(void* userdata,int category,SDL_LogPriority priority,const char* message)