简体中文

SDK日志抓取和保存

SDK日志抓取和保存

更新日期:2025/2/13


简述

目前SDK提供的库,分正式版本和调试版本,区别在于库名是否带 'T',比如libIOTCAPIs.solibIOTCAPIsT.so

其中带'T'的版本,为调试版本。所以如果需要抓取SDK的日志,必须换成'T'库。

目前SDK每个模块都有提供对应的接口来设定日志的相关参数,如:路径和级别。


使用

具体的使用方式,建议在模块初始化之前调用,此处主要以IOTCAPIs模块为例:

LogAttr logAttr;
	memset(&logAttr, 0, sizeof(logAttr));
	logAttr.path = "./log_iotc.txt";//设定日志路径,须包含文件名。如路径为NULL,则为关闭日志。
	logAttr.log_level = LEVEL_VERBOSE;//LEVEL_VERBOSE、LEVEL_DEBUG、LEVEL_INFO、LEVEL_WARNING、LEVEL_ERROR、LEVEL_SILENCE,越往后,日志越粗略
	logAttr.file_max_size = 0; //单位为字节,0为无限制
	logAttr.file_max_count = 0; //0为无限制
	IOTC_Set_Log_Attr(logAttr);

其他模块类似的接口为:RDT_Set_Log_AttrAV_Set_Log_AttrTUTK_Set_Log_AttrP2PTunnel_Set_Log_AttrNebula_Set_Log_Attr。(API命名{ModuleName_Set_Log_Attr},用到哪些模块,就要调用对应的模块的接口设定)


LogAttr logAttr;
	memset(&logAttr, 0, sizeof(logAttr));
	logAttr.log_level = LEVEL_VERBOSE;//LEVEL_VERBOSE、LEVEL_DEBUG、LEVEL_INFO、LEVEL_WARNING、LEVEL_ERROR、LEVEL_SILENCE,越往后,日志越粗略
	logAttr.file_max_size = 0; //单位为字节,0为无限制
	logAttr.file_max_count = 0; //0为无限制
	logAttr.path = "./log_global.txt";//设定global的日志
	TUTK_Set_Log_Attr(logAttr);
	
	logAttr.path = "./log_rdt.txt";//如果有用到RDTAPIs,使用此方式开日志,一般需要同时开IOTC,GLOBAL的日志
	RDT_Set_Log_Attr(logAttr);
	
	logAttr.path = "./log_av.txt";//如果有用到AVAPIs,使用此方式开日志,一般同时需要开IOTC,GLOBAL的日志
	AV_Set_Log_Attr(logAttr);
	
	logAttr.path = "./log_tunnel.txt";//如果有用到P2PTunnelAPIs,使用此方式开日志,一般需要同时开IOTC跟RDT,GLOBAL的日志
	P2PTunnel_Set_Log_Attr(logAttr);

特别注意: IOS平台因为所有的库都封装在一起,所以必须要调用上面对应的接口设定路径。


日志回调:

//设定log等级
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);


FAQ

T库是否可以用以正式环境?

可以,默认可以通过设定日志级别设定为LEVEL_SILENCE,即可以不产生日志,等需要产生日志的时候,再进行打开。

SDK的日志可以用以排查哪些问题?


  • 设备掉线问题,只需要设备端的日志。
  • APP连线问题,一般需要APP端和设备端的日志。
  • 数据传输不顺畅问题,一般需要APP端和设备端的日志。
  • 一些特殊的API报错,视具体情况而定。
  • 崩溃问题,一般只需要本端日志。



使用模块:IOTCAPIs+AVAPIs


问题|日志 客户端 设备端
IOTCAPIs AVAPIs GlobalAPIs IOTCAPIs AVAPIs GlobalAPIs
设备掉线




设备在线,IOTC无法连接



IOTC连线成功,AV通道创建失败

排查客户端端口占用


排查设备端端口占用


即刻开启您的物联网之旅

联系解决方案专家
Kalay App
解决方案
新闻动态
公司动态
行业资讯
媒体报道
永续发展
经营者的话
社会参与
环境永续
公司治理

+86 755 27702549

7×24小时服务热线

法律声明 隐私权条款

关注“TUTK”

TUTK服务尽在掌握

© 2022 物联智慧科技(深圳)有限公司版权所有粤ICP备14023641号
在线咨询
扫一扫

TUTK服务尽在掌握

全国免费服务热线
+86 755 27702549

返回顶部