更新时间: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;
}
上传日志是把本地保存的日志文件上传到涂鸦开发者平台,当设备出现异常时,设备日志有助于更好地定位和解决问题。
平台触发的日志上传功能,是指通过涂鸦运营平台触发设备上传日志。触发时要求设备在线,当设备处于离线状态时该功能不可用。同时还需要设备授权是否可以上传日志,只有开发者在面板端开启了 设备日志 按钮,平台才可正常触发日志上传功能。
平台触发使用 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); // 注册云端日志回调处理函数
}
目前 机器人开发与服务后台 需要开启白名单才能使用,如需使用该功能,请联系您的涂鸦客户经理。
操作步骤如下:
登录 机器人开发与服务后台,单击左侧导航栏上的 产品管理 进入 产品管理 页面,然后单击 新增。
在 新增产品 弹窗中,单击下拉列表选择 产品ID,并填入您的设备 PID。
添加完成后,选中您的产品,单击确定,将产品添加到 产品管理 页面。
单击左侧导航栏上的 设备管理 进入 设备管理 页面。
在 设备ID 处填入设备的 PID,然后单击右侧的 搜索。在列表中,单击 操作* 栏下的 设备日志,进入 设备日志 页面。
在 设备本地日志 页签下,单击 上传日志。
当日志的状态显示为 上传成功 后,开发者可通过单击 下载 来获取本地日志。
该内容对您有帮助吗?
是意见反馈该内容对您有帮助吗?
是意见反馈