2.16 haas506 2.0开发教程-高级组件库-ulog(2.2版本接口有更新)

最新案例教程点击下方链接跳转,CSDN已停止更新

点击跳转HaaS506官方最新案例







ULOG - 日志服务

(1)案例说明

  • 使用ulog模块控制本地log显示将日志内容上传云端,以便用户查看与管理。

  • ulog日志的定义:日志是将软件运行的状态、过程等信息,输出到不同的介质中(例如:文件、控制台、显示屏等),并进行显示和保存。为软件调试、维护过程中的问题追溯、性能分析、系统监控、故障预警等功能,提供参考依据。

  • 模块功能:ulog日志系统是HaaS轻应用为开发者提供的日志记录系统,为基于HaaS轻应用的开发者提供日志分级控制,日志本地存储等服务。

  • ulog的分级(为了方便信息的筛选,五个级别向下包含,例如选择LOG_WARN可以输出warn + error + fatal三个级别)

常量常量数值常量说明
LOG_DEBUG7调试级别 debug + info + warn + error + fatal
LOG_INFO6信息级别 info + warn + error + fatal
LOG_WARN4警告级别 warn + error + fatal
LOG_ERROR2错误级别 error + fatal
LOG_FATAL3灾难级别 fatal
  • 注意事项: ulog同时管理native层和python层的log。这意味着一些底层log有时也会被记录。

(2)操作步骤

1、在云平台创建产品,添加设备。参考这篇文章创建产品

2、烧录代码(代码包括连接阿里云以及控制ulog输出得功能)

3、2.2版本获取IMEI号接口有更新,需要更改以下内容(Ctrl+F 查找modem)

# 获取设备的IMEI 作为deviceName 进行动态注册
deviceName = modem.info.getDevImei()
...

  • mian.py
# coding=utf-8

from driver import GPIO
import network
import ujson
import utime as time
import modem
from  aliyunIoT import Device
import ota
import kv
import ulog


 
#当iot设备连接到物联网平台的时候触发'connect' 事件
def on_connect(data):
    global module_name,default_ver,productKey,deviceName,deviceSecret,on_trigger,on_download,on_verify,on_upgrade
    print('***** connect lp succeed****')
    data_handle = {}
    data_handle['device_handle'] = device.getDeviceHandle()
 


#当连接断开时,触发'disconnect'事件
def on_disconnect():
    print('linkkit is disconnected')

#当iot云端下发属性设置时,触发'props'事件
def on_props(request):
    print('clound req data is {}'.format(request))

#当iot云端调用设备service时,触发'service'事件
def on_service(id,request):
    print('clound req id  is {} , req is {}'.format(id,request))
#当设备跟iot平台通信过程中遇到错误时,触发'error'事件
def on_error(err):
    print('err msg is {} '.format(err))

#网络连接的回调函数
def on_4g_cb(args):
    global g_connect_status
    pdp = args[0]
    netwk_sta = args[1]
    if netwk_sta == 1:
        g_connect_status = True
    else:
        g_connect_status = False

#网络连接
def connect_network():
    global net,on_4g_cb,g_connect_status
    #NetWorkClient该类是一个单例类,实现网络管理相关的功能,包括初始化,联网,状态信息等.
    net = network.NetWorkClient()
    g_register_network = False
    if net._stagecode is not None and net._stagecode == 3 and net._subcode == 1:
        g_register_network = True
    else:
        g_register_network = False
    if g_register_network:
    #注册网络连接的回调函数on(self,id,func);  1代表连接,func 回调函数  ;return 0 成功
        net.on(1,on_4g_cb)    
        net.connect(None)
    else:
        print('网络注册失败')
    while True:
        if g_connect_status:
            print('网络连接成功')
            break
        time.sleep(1)

#动态注册回调函数
def on_dynreg_cb(data):
    global deviceSecret,device_dyn_resigter_succed
    deviceSecret = data
    device_dyn_resigter_succed = True


 # 连接物联网平台
def dyn_register_device(productKey,productSecret,deviceName):
    global on_dynreg_cb,device,deviceSecret,device_dyn_resigter_succed
    key = '_amp_customer_devicesecret'
    deviceSecretdict = kv.get(key)
    print("deviceSecretdict:",deviceSecretdict)
    if isinstance(deviceSecretdict,str):    
        deviceSecret = deviceSecretdict 

    if deviceSecretdict is None or deviceSecret is None:
        key_info = {
            'productKey': productKey  ,
            'productSecret': productSecret ,
            'deviceName': deviceName
            }
        # 动态注册一个设备,获取设备的deviceSecret
        #下面的if防止多次注册,当前若是注册过一次了,重启设备再次注册就会卡住,
        if not device_dyn_resigter_succed:
            device.register(key_info,on_dynreg_cb)   



if __name__ == '__main__':


    ICCID=None
    g_connect_status = False
    net = None
    device = None
    deviceSecret = None
    deviceName = None
    productKey = "a1aNr1wef2c"
    productSecret = "M8HmBEz59W6YgSL2"
    device_dyn_resigter_succed = False
    # 定义需要升级的模块和版本号
    module_name = 'default'
    default_ver = '1.0.0'
# 定义升级包的下载和安装路径,其中url,hash_type和hash 会通过服务端推送被保存下来

    info = {
        'url': '',
        'store_path': '/data/pyamp/app.zip',
        'install_path': '/data/pyamp/',
        'length': 0,
        'hash_type': '',
        'hash': ''
    }

    # 连接网络
    connect_network()
     # 获取设备的IMEI 作为deviceName 进行动态注册
    #2.2版本改为
    #deviceName = modem.info.getDevImei()
    deviceName = modem.getDevImei()
    #获取设备的ICCID
    ICCID=modem.sim.getIccid()
    #初始化物联网平台Device类,获取device实例
    device = Device()
    if deviceName is not None and len(deviceName) > 0 :
     #动态注册一个设备
        dyn_register_device(productKey,productSecret,deviceName)
    else:
        print("获取设备IMEI失败,无法进行动态注册")
    while deviceSecret is None:
        time.sleep(0.2)
    print('动态注册成功:' + deviceSecret)

    key_info = {
        'region' : 'cn-shanghai' ,
        'productKey': productKey ,
        'deviceName': deviceName ,
        'deviceSecret': deviceSecret ,
        'keepaliveSec': 60,
        }
    #打印设备信息
    print(key_info)

    #device.ON_CONNECT 是事件,on_connect是事件处理函数/回调函数
    device.on(device.ON_CONNECT,on_connect)
    device.on(device.ON_DISCONNECT,on_disconnect)
    device.on(device.ON_PROPS,on_props)
    device.on(device.ON_SERVICE,on_service)
    device.on(device.ON_ERROR,on_error)
    device.connect(key_info)


    #ulog模块
    #控制本地log输出等级
    ulog.setStdLogLevel(ulog.LOG_DEBUG)
    #控制云端log输出等级
    ulog.setFsLogLevel(ulog.LOG_ERROR)

    #循环打印warn + error + fatal三种级别log,测试模块功能
    m = 0
    while True:
        time.sleep(3)
        for i in range(5):
            m +=1
            if m<=3:
                ulog.error('TEST','--------------little--------------')
            elif m>9:
                ulog.fatal('TEST','==============big==============')
                m = 0
            else:
                ulog.warn('TEST','normal')
            time.sleep(1)

3、设备激活在线后,打开设备本地日志上报
在这里插入图片描述
4、选择日志服务
在这里插入图片描述
设备本地日志里打印的就是上传的ulog内容
在这里插入图片描述

(3)效果说明

1、ulog.setStdLogLevel(ulog.LOG_DEBUG)函数用来调节本地串口工具输出log等级
比如:

  • ulog.setStdLogLevel(ulog.LOG_FATAL),日志输出只输出 fatal级别ulog
    在这里插入图片描述
  • ulog.setStdLogLevel(ulog.LOG_WARN),日志输出warn + error + fatal三种级别ulog
    在这里插入图片描述
    2、ulog.setFsLogLevel(ulog.LOG_ERROR)函数用来控制上传云平台(设备本地日志)的日志级别。
    在这里插入图片描述

Class-ulog

setStdLogLevel(level)setFsLogLevel(level)debug(tag, msg)info(tag, msg)warn(tag, msg)error(tag, msg)fatal(tag, msg)
设置终端日志输出等级设置记录到文件系统的日志等级debug日志info日志warn日志error日志fatal日志

级别日志标签
调试级别 debugulog.LOG_DEBUG
L信息级别 infoulog.LOG_INFO
警告级别 warnulog.LOG_WARN
错误级别 errorulog.LOG_ERROR
灾难级别 fatalulog.LOG_FATAL

ulog.setStdLogLevel(level) - 设置终端日志输出等级

函数功能: 设置终端日志输出等级
参数说明:
参数类型必选参数?说明
levelint日志标签
返回值:成功:0,失败:-1。

ulog.setFsLogLevel(level) - 设置记录到文件系统的日志等级

函数功能:设置记录到文件系统的日志等级
参数说明:
参数类型必选参数?说明
levelint日志标签
返回值:成功:0,失败:-1。

ulog.debug(tag, msg) - debug日志

函数功能:记录debug级别日志
参数说明:
参数类型必选参数?说明
tagstring模块名
msgstring日志内容

ulog.info(tag, msg) - info日志

函数功能:记录info级别日志
参数说明:
参数类型必选参数?说明
tagstring模块名
msgstring日志内容

ulog.warn(tag, msg) - warn日志

函数功能:记录warn级别日志
参数说明:
参数类型必选参数?说明
tagstring模块名
msgstring日志内容

ulog.error(tag, msg) - error日志

函数功能:记录error级别日志
参数说明:
参数类型必选参数?说明
tagstring模块名
msgstring日志内容

ulog.fatal(tag, msg) - fatal日志

函数功能:记录debug级别日志
参数说明:
参数类型必选参数?说明
tagstring模块名
msgstring日志内容
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值