日志管理

更新时间:2025-01-21 02:46:57下载pdf

TuyaOS 提供分级别的日志记录功能,您可以自由选择输出媒介(文件、终端等)。同时,涂鸦运营平台支持远程获取设备本地日志,遇到线上问题可以通过分析设备本地日志来排查问题。
设备本地日志功能是 IoT 扫地机产品的一个关键功能,日志记录了异常的现场,为分析问题提供关键线索,建议您在扫地机产品上使用该功能。

日志管理

适配日志接口

TuyaOS 只负责日志输出的消息格式化,提供了 TuyaOS Kernel 标准接口 tkl_output.h,由应用来实现通过具体的媒介输出日志的内容。

TuyaOS 的默认输出终端是调用 tkl_log_output 接口,应用需要在该接口中实现日志输出功能。

例如:

  • 把日志打印到终端:

    VOID_T tkl_log_output(IN CONST CHAR_T *str, ...)
    {
        printf("%s", str);
        fflush(stdout);
        return;
    }
    
    
  • 把日志保存到文件:

    VOID_T tkl_log_output(IN CONST CHAR_T *str, ...)
    {
        uFILE * fp = NULL;
    
        // 打开文件
        fp = ufopen("log.txt", "w+");
        if(NULL == fp) {
            return ;
        }
    
        // 写入文件
        uiWriteCnt = ufwrite(fp, str, strlen(str));
        if(uiWriteCnt != strlen(str)) {
            TAL_PR_ERR("log uf file write data error!");
            return ;
        }
    
        // 关闭文件
        ufclose(fp);
    
        return;
    }
    

设置输出等级

运行 TuyaOS 之后,您可以调用 tuya_iot_set_log_attr 接口设置日志输出阈值,小于或等于设置的阈值都会被输出,输出等级定义如下:

#define TY_LOG_LEVEL_ERR                     输出阈值为错误日志
#define TY_LOG_LEVEL_WARN                    输出阈值为警告日志
#define TY_LOG_LEVEL_NOTICE                  输出阈值为通知日志
#define TY_LOG_LEVEL_INFO                    输出阈值为信息日志
#define TY_LOG_LEVEL_DEBUG                   输出阈值为调试日志
#define TY_LOG_LEVEL_TRACE                   输出阈值为跟踪日志

一般在设备调试阶段,需要开发者把日志等级开到 TY_LOG_LEVEL_DEBUG 模式,方便排查问题。

使用实例:

//设置日志等级
	tuya_iot_set_log_attr(TY_LOG_LEVEL_DEBUG);

日志输出

PR_DEBUG	输出调试日志
PR_DEBUG_RAW	输出调试日志(未格式化的 RAW 消息)
PR_ERR	        输出错误日志
PR_WARN	        输出警告日志
PR_INFO	        输出信息日志
PR_TRACE	输出跟踪日志

使用示例:

VOID test_log(VOID)
{
	BYTE_T test_buf[8] = {0};
        tuya_iot_set_log_attrattr(TAL_LOG_LEVEL_TRACE);
	PR_TRACE("This is a trace message");

	tuya_iot_set_log_attr(TAL_LOG_LEVEL_DEBUG);
	PR_DEBUG("This is a debug message");
	PR_ERR("This is an error message");
	PR_WARN("This is a warning message");
	PR_INFO("This is an info message");

	PR_DEBUG("PR_DEBUG_RAW:");
	for (INT_T i = 0; i < sizeof(test_buf); i++) {
		PR_DEBUG_RAW("%02x ", test_buf[i]);
	}
	PR_DEBUG_RAW("\r\n");

    return;
}

日志上传

上传日志是把本地保存的日志文件上传到涂鸦开发者平台,当设备出现异常时,设备日志有助于更好地定位和解决问题。

  • 如果把所有日志都保存到文件,那么随时间推移文件会越来越大,最终导致设备存储空间不足。
  • 建议设备预留一定的空间(如 10 MB 持久化存储区)来保存日志,为了节省空间,可以对日志文件进行切片处理。当内存文件超过一定大小(如 10 M / 20 M 等),则把该日志文件进行压缩备份。当所有的日志文件总大小超过一定的阈值,则把时间最早的备份文件删除,腾出空间存储新日志。

平台触发

平台触发的日志上传功能,是指通过涂鸦运营平台触发设备上传日志。触发时要求设备在线,当设备处于离线状态时该功能不可用。同时还需要设备授权是否可以上传日志,只有开发者在面板端开启了 设备日志 按钮,平台才可正常触发日志上传功能。

日志管理

平台触发使用 tuya_iot_app_cbs_init 接口注册获取日志的回调函数,在回调函数中执行日志文件压缩操作,并将压缩文件的完整路径准确地通知 TuyaOS,TuyaOS 会把文件上传到涂鸦开发者平台。

使用示例

/**
 * @brief  设备本地日志上报的处理
 * @param  [char*] path 上报的日志路径
 * @param  [int] len
 * @return [*]
 */
void cloud_log_path_cb(OUT char* path, IN CONST int len)
{
    char cmd[128] = { 0 };
    //开发者可以将本地的日志如 test.log 打包到 log_all.tar(名称可自行定义),开发者只需要注意,一次打包的文件大小不要超过 30M,如果文件够大,可以分批打包分批传递给 path
    snprintf(cmd, sizeof(cmd), "tar -cvf /tmp/log_all.tar /tmp/test.log"); 
    system(cmd);
    strcpy(path, "/tmp/log_all.tar");   //将打包好的日志包及路径传递给 path 即可,SDK 会通过 cloud_log_path_cb 来获取
    PR_DEBUG("goto upload local log finish");

    return;
}

/**
 * @brief  设备本地日志上报之后的回调函数
 * @param  [int] result 处理的结果 0 OK
 * @return [*]
 */
void cloud_log_deal_cb(OUT INT_T result)
{
    char cmd[128] = { 0 };

    if (OPRT_OK == result) { // 开发者收到上报成功的回调,可以删除本地文件
        snprintf(cmd, sizeof(cmd), "rm -rf /tmp/log_all.tar");    //删除文件
        system(cmd);
    }
    PR_DEBUG("upload app log %d, goto delete data! ", result);
    return;
}

/**
 * @brief  设备本地日志上报初始化
 * @param  [*]
 * @return [*]
 */
void ty_log_upload_init(void)    
{
    TY_IOT_APP_CBS_S app_log_deal = {
        cloud_log_path_cb,
        cloud_log_deal_cb
    };

    tuya_iot_app_cbs_init(&app_log_deal); // 注册云端日志回调处理函数
}

下载日志步骤

目前 机器人开发与服务后台 需要开启白名单才能使用,如需使用该功能,请联系您的涂鸦客户经理。

操作步骤如下:

  1. 登录 机器人开发与服务后台,单击左侧导航栏上的 产品管理 进入 产品管理 页面,然后单击 新增

    日志管理

  2. 新增产品 弹窗中,单击下拉列表选择 产品ID,并填入您的设备 PID。

    日志管理

  3. 添加完成后,选中您的产品,单击确定,将产品添加到 产品管理 页面。

    日志管理

  4. 单击左侧导航栏上的 设备管理 进入 设备管理 页面。

  5. 设备ID 处填入设备的 PID,然后单击右侧的 搜索。在列表中,单击 操作* 栏下的 设备日志,进入 设备日志 页面。

    日志管理

  6. 设备本地日志 页签下,单击 上传日志
    当日志的状态显示为 上传成功 后,开发者可通过单击 下载 来获取本地日志。

    日志管理