日志上报

物联网平台支持设备本地日志的上报,您可以在物联网平台控制台的日志服务页面,查询设备本地日志,进行故障分析。本文介绍通过配置C Link SDK ,支持设备向物联网平台上报本地日志。

前提条件

使用流程

如下功能时序图,以设备的应用程序demos/logpost_basic_demo.c为例,介绍日志上报的使用流程。

image..png

步骤一:设备初始化

  1. 创建设备句柄,完成设备建连。

    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;
    }
  2. 配置日志模块。

    • 设置日志模块回调函数。

      /* 设置日志模块回调函数 */
      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");
        }
    }
    ....
}

步骤二:日志上报

  1. 发送日志上报请求。

    /* 上报日志到云端 */
    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

    上报的日志信息。

  2. 云端回复。

    若您在步骤一设置日志上报是需要回复,云端在收到日志上报后,存储完成,会回复日志上报结果。

    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);