TuyaOS提供按照模块、分级别的日志记录能力,开发者可以根据自己的需求,选择合适的日志级别进行日志记录输出,同时也可以设置默认输出的日志级别,控制只输出默认输出日志级别以上的日志。TuyaOS的日志模块,支持灵活的添加输出的出口,开发者可以根据自己的需求,将日志输出到串口、文件或者是网络上。
TuyaOS同时也支持在线日志的模式,开发者可以在涂鸦IoT平台上,通过设备命令,设置日志的级别和输出出口,如果输出出口是MQTT,并且网络正常,客户即可在涂鸦IoT平台上看到设备日志信息。
日志级别信息
typedef enum {
TAL_LOG_LEVEL_ERR,
TAL_LOG_LEVEL_WARN,
TAL_LOG_LEVEL_NOTICE,
TAL_LOG_LEVEL_INFO,
TAL_LOG_LEVEL_DEBUG,
TAL_LOG_LEVEL_TRACE,
} TAL_LOG_LEVEL_E;
TuyaOS 定义了6个日志级别,其中TAL_LOG_LEVEL_INFO,TAL_LOG_LEVEL_DEBUG,TAL_LOG_LEVEL_TRACE在发布固件中默认不可见,但可以通过接口设置日志级别而恢复输出。
接口描述
日志输出宏
TAL_PR_ERR(fmt, ...)
TAL_PR_WARN(fmt, ...)
TAL_PR_NOTICE(fmt, ...)
TAL_PR_INFO(fmt, ...)
TAL_PR_DEBUG(fmt, ...)
TAL_PR_TRACE(fmt, ...)
TAL_PR_HEXDUMP_ERR(title, buf, size)
TAL_PR_HEXDUMP_WARN(title, buf, size)
TAL_PR_HEXDUMP_NOTICE(title, buf, size)
TAL_PR_HEXDUMP_INFO(title, buf, size)
TAL_PR_HEXDUMP_DEBUG(title, buf, size)
TAL_PR_HEXDUMP_TRACE(title, buf, size)
添加日志output
typedef VOID (*LOG_OUTPUT)(IN CONST CHAR_T *str);
OPERATE_RET tal_log_add_output_term(CONST CHAR_T *name, CONST TAL_LOG_OUTPUT_CB term);
此接口可以自定义一个输出终端,需要自己按照LOG_OUTPUT原型实现一个接口,并且添加到日志服务。后续日志输出会额外新增一个输出接口(原来的输出方式会继续保留)。
删除日志output
VOID tal_log_del_output_term(CONST CHAR_T *name);
此接口用于删除通过接口tal_log_add_output_term设置的日志输出终端。
设置日志输出级别
OPERATE_RET tal_log_set_manage_attr(CONST TAL_LOG_LEVEL_E level);
此接口用于设置默认的日志输出级别。设置日志级别可以控制日志输出,如果需要输出的日志级别小于当前的日志级别,则可以输出;否则,则不会输出。
获取日志输出级别
OPERATE_RET tal_log_get_log_manage_attr(TAL_LOG_LEVEL_E *level);
此接口用于获取默认的日志输出级别。
使用示例
VOID log_output_to_file(IN CONST CHAR_T *str)
{
if(NULL == fp) {
PR_ERR("log uf file can't open and write data!");
return ;
}
uiWriteCnt =
ufwrite(fp, str, strlen(str));
if(uiWriteCnt != strlen(str)) {
PR_ERR("log uf file write data error!");
return ;
}
return;
}
VOID sample_logoutput_test()
{
tal_log_set_manage_attr(TY_LOG_LEVEL_DEBUG);
TAL_PR_DEBUG("a debug log");
tal_log_set_manage_attr(TY_LOG_LEVEL_NOTICE);
TAL_PR_DEBUG("another debug log");
TAL_PR_DEBUG("an error log");
tal_log_add_output_term("filelog", log_output_to_file);
TAL_PR_DEBUG("another debug log");
TAL_PR_ERR("another error log");
tal_log_del_output_term("filelog");
TAL_PR_ERR("another error log");
return;
}
uFILE * ufopen(IN CHAR_T *filepath, IN CHAR_T *mode)
open a unique file
VOID uFILE
unique file handle
Definition: tuya_uf_db.h:22
OPERATE_RET ufclose(IN uFILE *fd)
close a unique file
UINT_T ufwrite(IN uFILE *fd, IN UCHAR_T *buf, IN CONST UINT_T len)
write to unique file