x265的LOG等级划分:
#define X265_LOG_NONE (-1)
#define X265_LOG_ERROR 0
#define X265_LOG_WARNING 1
#define X265_LOG_INFO 2
#define X265_LOG_DEBUG 3
#define X265_LOG_FULL 4
调用的函数:
void general_log(const x265_param* param, const char* caller, int level, const char* fmt, ...)
{
if (param && level > param->logLevel)
return;
const int bufferSize = 4096;
char buffer[bufferSize];
int p = 0;
const char* log_level;
switch (level)
{
case X265_LOG_ERROR:
log_level = "error";
break;
case X265_LOG_WARNING:
log_level = "warning";
break;
case X265_LOG_INFO:
log_level = "info";
break;
case X265_LOG_DEBUG:
log_level = "debug";
break;
case X265_LOG_FULL:
log_level = "full";
break;
default:
log_level = "unknown";
break;
}
if (caller)
p += sprintf(buffer, "%-4s [%s]: ", caller, log_level);
// 先输出一句
// x265 [log-level] 后面加具体的信息
va_list arg;
va_start(arg, fmt);
vsnprintf(buffer + p, bufferSize - p, fmt, arg);
va_end(arg);
fputs(buffer, stderr);
}
可变参数打印字符串数据
int _vsnprintf(char* str, size_t size, const char* format, va_list ap);
_vsnprintf使用实例
#include <stdio.h>
#include <stdarg.h>
int mon_log(char* format, ...)
{
char str_tmp[50];
int i=0;
va_list vArgList; //定义一个va_list型的变量,这个变量是指向参数的指针.
va_start (vArgList, format); //用va_start宏初始化变量,这个宏的第二个参数是第一个可变参数的前一个参数,是一个固定的参数
i=_vsnprintf(str_tmp, 50, format, vArgList); //注意,不要漏掉前面的_
va_end(vArgList); //用va_end宏结束可变参数的获取
return i; //返回参数的字符个数中间有逗号间隔
}
//调用上面的函数
void main()
{
int i=mon_log("%s,%d,%d,%d","asd",2,3,4);
printf("%d\n",i);
}
主要是不同情况下,不知道字符串中需要有多少格式信息。
这个时候需要使用_vsnprintf打印信息。
x265_log使用示例:
x265_log(NULL, X265_LOG_ERROR, "malloc of size %d failed\n", sizeof(int) * 5);
// 有一个格式信息
x265_log(m_param, X265_LOG_ERROR, "encoder aborting because of internal error\n");
// 没有额外的格式信息