物聯網平臺支持設備本地日志的上報,您可以在物聯網平臺控制臺的日志服務頁面,查詢設備本地日志,進行故障分析。本文介紹通過配置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);
文檔內容是否對您有幫助?