日志管理

更新时间:2025-02-20 02:15:30下载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. 设备本地日志 页签下,单击 上传日志
    当日志的状态显示为 上传成功 后,开发者可通过单击 下载 来获取本地日志。

    日志管理