物联网平台支持设备本地日志的上报,您可以在物联网平台控制台的日志服务页面,查询设备本地日志,进行故障分析。本文介绍通过配置C Link SDK ,支持设备向物联网平台上报本地日志。
前提条件
已获取设备认证信息。
已在物联网平台控制的设备详情页,打开设备本地日志上报开关。
使用流程
如下功能时序图,以设备的应用程序demos/logpost_basic_demo.c
为例,介绍日志上报的使用流程。
步骤一:设备初始化
创建设备句柄,完成设备建连。
static void* demo_device_init(char *product_key, char *device_name, char *device_secret, char *host, uint16_t port) { int32_t res = STATE_SUCCESS; /* 创建设备 */ void *device = aiot_device_create(product_key, device_name); .... .... res = aiot_device_connect(device); .... .... return device; }
配置日志模块。
设置日志模块回调函数。
/* 设置日志模块回调函数 */ aiot_device_logpost_set_callback(device, demo_logpost_msg_callback, NULL);
参数说明
参数
说明
device
设备句柄。
demo_logpost_msg_callback
日志模块的消息回调函数。
NULL
回调函数的上下文。
(可选)设置日志上报是否需要回复。
/* 设置日志上报是否需要回复 0:默认值,不需要回复 1.需要回复 */ aiot_device_logpost_set_post_reply(device, 1);
参数说明
参数
说明
device
设备句柄。
1
1:表示需要回复。
0(默认):表示不需要回复。
日志模块配置后,Link SDK会自动向物联网平台查询日志开关是否打开,开关的状态也会通过回调函数通知用户。
static void demo_logpost_msg_callback(void *device, const aiot_logpost_event_t *event, void *userdata)
{
if(event->type == AIOT_LOGPOSTEVT_CONFIG_DATA) {
if(event->data.config_data.on_off == 1) {
printf("device logpost config on\r\n");
} else {
printf("device logpost config off\r\n");
}
}
....
}
步骤二:日志上报
发送日志上报请求。
/* 上报日志到云端 */ static void demo_send_log(void *device, char *log) { int32_t res = 0; aiot_log_t log_msg; memset(&log_msg, 0, sizeof(aiot_log_t)); log_msg.timestamp = 0; /* 单位为ms的时间戳, 填写0则SDK将使用当前的时间戳 */ log_msg.loglevel = AIOT_LOGPOST_LEVEL_DEBUG; /* 日志级别 */ log_msg.module_name = "APP"; /* 日志对应的模块 */ log_msg.code = 200; /* 状态码 */ log_msg.msg_id = 0; /* 云端下行报文的消息标示符, 若无对应消息可直接填0 */ log_msg.content = log; /* 日志内容 */ res = aiot_device_logpost_send(device, &log_msg); if (res < 0) { printf("aiot_device_logpost_send failed: -0x%04X\r\n", -res); } }
参数说明
参数
说明
device
设备句柄。
log_msg
上报的日志信息。
云端回复。
若您在步骤一设置日志上报是需要回复,云端在收到日志上报后,存储完成,会回复日志上报结果。
当
code
为200时,表示日志上报成功。static void demo_logpost_msg_callback(void *device, const aiot_logpost_event_t *event, void *userdata) { .... if(event->type == AIOT_LOGPOSTEVT_POST_REPLY) { printf("device logpost post reply id %d, code %d\r\n", event->data.post_reply.msg_id, event->data.post_reply.code); } }
参数说明
参数
说明
device
设备句柄。
event
消息的时间的具体内容。
userdata
回调的上下文。
步骤三:设备反初始化
/* 断开设备连接,并回收设备资源 */
demo_device_deinit(device);
文档内容是否对您有帮助?