配置log输出-需要
- 使用带T的库
- 代码配置实现
配置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:
- 保存log到文件
- 通过回调接口输出log
保存log到文件
接口说明
- 接口:xxx_Set_Log_Attr(logAttr)
- 支持版本:all SDK
- 调用位置:TUTK_SDK_Set_License_Key() 之前
使用举例
举例-C
LogAttr logAttr; memset(&logAttr, 0, sizeof(logAttr)); logAttr.path = "./xxx_log_global.txt"; //设定日志路径,须包含文件名。如路径为NULL,则为关闭日志 logAttr.log_level = LEVEL_VERBOSE; //LEVEL_VERBOSE、LEVEL_DEBUG、LEVEL_INFO、LEVEL_WARNING、LEVEL_ERROR、LEVEL_SILENCE,越往后,日志信息量越小 logAttr.file_max_size = 0; //log文件大小,单位为字节,0为无限制 logAttr.file_max_count = 0; //log文件数量,0为无限制 TUTK_Set_Log_Attr(logAttr); memset(&logAttr, 0, sizeof(logAttr)); logAttr.path = "./xxx_log_iotapi.txt"; logAttr.log_level = LEVEL_VERBOSE; logAttr.file_max_size = 0; logAttr.file_max_count = 0; IOTC_Set_Log_Attr(logAttr); memset(&logAttr, 0, sizeof(logAttr)); logAttr.path = "./xxx_log_avapi.txt"; logAttr.log_level = LEVEL_VERBOSE; logAttr.file_max_size = 0; logAttr.file_max_count = 0; AV_Set_Log_Attr(logAttr);//其他接口
举例-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
接口说明
- 接口:TUTK_Set_Log_Callback()
- 功能:通过接口输出SDK log,自由度更高
- 支持版本: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);
补充
其他类似的模块接口:
- RDT_Set_Log_Attr()
- P2PTunnel_Set_Log_Attr()
- Nebula_Set_Log_Attr()
需要用哪些模块,就调用对应模块的接口设定。
注意事项
- IOS平台因为所有的库都封装在一起,所以需要时直接调用上面对应的接口设定路径就好。
- T库可以用于正式环境
- 默认可以通过设定日志级别设定为LEVEL_SILENCE,即可以不产生日志,等需要产生日志的时候,再进行打开
- log输出接口的调用位置,在XXX_Initialize 之前就可以
- callback接口,使用时不能占用太久(几百毫秒内完成),不然会卡住SDK