SDK日志回调输出的方法
配置log输出-需要
1.使用带T的库
2.代码配置实现
配置log输出-库文件说明
不带T的库
libAVAPIs.so libIOTCAPIs.so libP2PTunnelAPIs.so libRDTAPIs.so libTUTKGlobalAPIs.so
带T的库
libAVAPIsT.so libIOTCAPIsT.so libP2PTunnelAPIsT.so libRDTAPIsT.so libTUTKGlobalAPIsT.so
其他说明
- RTOS版本带log输出的lib,文件名称中不带T
- 带T跟不带T的只是编译时的日志开关是否打开,编译出来的库大小会不一样
配置log输出-代码实现
有两种方式来获得log:
1.保存log到文件
2.通过回调接口输出log
保存log到文件
接口说明
1.接口:xxx_Set_Log_Attr(logAttr)
2.支持版本:all SDK
3调用位置:TUTK_SDK_Set_License_Key() 之前使用举例
举例-C
// 初始化日志配置结构体(通用函数,避免重复 memset)
static void initLogAttr(LogAttr* logAttr, const char* logPath, LogLevel level,
unsigned int maxSize, unsigned int maxCount) {
memset(logAttr, 0, sizeof(LogAttr));
logAttr->path = logPath; // 日志文件路径(含文件名)
logAttr->log_level = level; // 日志级别
logAttr->file_max_size = maxSize; // 单文件最大大小(字节,0=无限制)
logAttr->file_max_count = maxCount;// 日志文件最大数量(0=无限制)
}
// 全局日志配置入口
void configTUTKLogs(void) {
LogAttr logAttr;
// 1. 配置全局日志(TUTK框架层)
initLogAttr(
&logAttr,
"./xxx_log_global.txt", // 日志路径
LEVEL_VERBOSE, // 最详细日志级别(调试阶段推荐)
0, // 单文件无大小限制
0 // 无文件数量限制
);
TUTK_Set_Log_Attr(logAttr);
// 2. 配置IOTC模块日志(网络通信层)
initLogAttr(
&logAttr,
"./xxx_log_iotapi.txt", // IOTC模块专属日志文件
LEVEL_VERBOSE,
0,
0
);
IOTC_Set_Log_Attr(logAttr);
// 3. 配置AV模块日志(音视频传输层)
initLogAttr(
&logAttr,
"./xxx_log_avapi.txt", // AV模块专属日志文件
LEVEL_VERBOSE,
0,
0
);
AV_Set_Log_Attr(logAttr);
// 提示:生产环境建议调整配置
// - 日志级别:LEVEL_INFO 或 LEVEL_WARNING(减少日志量)
// - 单文件大小:5*1024*1024(5MB,避免文件过大)
// - 文件数量:10(日志轮转,避免磁盘占满)
}举例-Android
/**
* 设置日志存储
* @param dirPath log保存路径
*/
public static void openLocalLog(String dirPath) {
St_LogAttr st_logAttr = new St_LogAttr();
st_logAttr.st_logAttr = LogLevel.LEVEL_VERBOSE;
st_logAttr.file_max_count = 10;
st_logAttr.file_max_size = 512000;
st_logAttr.path = dirPath + File.separator + "AVAPIs.txt";
AVAPIs.AV_Set_Log_Attr(st_logAttr);
St_LogAttr st_logAttr2 = new St_LogAttr();
st_logAttr2.st_logAttr = LogLevel.LEVEL_VERBOSE;
st_logAttr2.file_max_count = 10;
st_logAttr2.file_max_size = 512000;
st_logAttr2.path = dirPath + File.separator + "IOTCAPIs.txt";
IOTCAPIs.IOTC_Set_Log_Attr(st_logAttr2);
St_LogAttr st_logAttr3 = new St_LogAttr();
st_logAttr3.st_logAttr = LogLevel.LEVEL_VERBOSE;
st_logAttr3.file_max_count = 10;
st_logAttr3.file_max_size = 512000;
st_logAttr3.path = dirPath + File.separator + "NebulaAPIs.txt";
NebulaAPIs.Nebula_Set_Log_Attr(st_logAttr3);
St_LogAttr st_logAttr4 = new St_LogAttr();
st_logAttr4.st_logAttr = LogLevel.LEVEL_VERBOSE;
st_logAttr4.file_max_count = 10;
st_logAttr4.file_max_size = 512000;
st_logAttr4.path = dirPath + File.separator + "TUTKGlobalAPIs.txt";
TUTKGlobalAPIs.TUTK_Set_Log_Attr(st_logAttr4);
//其他接口
}通过回调接口输出log
接口说明
1.接口:TUTK_Set_Log_Callback()
2.功能:通过接口输出SDK log,自由度更高
3.支持版本:4.3.3+ SDK该log输出api,level部分和之前保存log文件的接口共用,设置level可以过滤输出对应的level等级log
使用举例
举例-C
LogAttr logAttr;
memset(&logAttr, 0, sizeof(logAttr));
logAttr.log_level = LEVEL_VERBOSE;
TUTK_Set_Log_Attr(logAttr);
IOTC_Set_Log_Attr(logAttr);
AV_Set_Log_Attr(logAttr);
/*************** 函数定义 ***************/// 1. TUTK_GLOBAL_APIs
int32_t TUTK_Set_Log_Callback(LogFunc func);
//
// 2. typedef void(*LogFunc)(const char *domName, logLevel_t level, const char *str);
// domName: 模块名称
// str: log输出
/**************************************/
void LogOutFunc(const char *domName, logLevel_t level, const char *str)
{
switch (level) {
case LEVEL_ERROR:
print_ERROR("SDK, domName :%s, %s", domName, str);
break;
case LEVEL_WARNING:
print_WARNING("SDK,domName:%s,%s", domName,str);
break;
case LEVEL_INFO:
print_INFO("SDK, domName:%s, %s", domName, str);
break;
case LEVEL_DEBUG:
print_DEBUG("sDK, domlame:%s, %s", domName, str);
break;
case LEVEL_VERBOSE:
print_VERBOSE("SDK, domName:%s, %s", domName, str);
break;
case LEVEL_SILENCE:
break;
default:
printf("SDK, unknown level, domName:%s, %s", domName, str);
break;
}
}
TUTK_Set_Log_Callback(LogOutFunc);补充
其他类似的模块接口:
1.RDT_Set_Log_Attr()
2.P2PTunnel_Set_Log_Attr()
3.Nebula_Set_Log_Attr()需要用哪些模块,就调用对应模块的接口设定。
注意事项
1.IOS平台因为所有的库都封装在一起,所以需要时直接调用上面对应的接口设定路径就好。
2.T库可以用于正式环境(默认可以通过设定日志级别设定为LEVEL_SILENCE,即可以不产生日志,等需要产生日志的时候,再进行打开)
3.log输出接口的调用位置,在XXX_Initialize 之前就可以
4.callback接口,使用时不能占用太久(几百毫秒内完成),不然会卡住SDK
5.TUTK_Set_Log_Callback接口,优先级高于Set_Log_Attr中的path设定。如果TUTK_Set_Log_Callback被设置,Set_Log_Attr中存储到文件的path将无效
