haas506 2.0开发教程-高级组件库-ulog
最新案例教程点击下方链接跳转,CSDN已停止更新
点
击
跳
转
ULOG - 日志服务
(1)案例说明
-
使用ulog模块控制本地log显示将日志内容上传云端,以便用户查看与管理。
-
ulog日志的定义:日志是将软件运行的状态、过程等信息,输出到不同的介质中(例如:文件、控制台、显示屏等),并进行显示和保存。为软件调试、维护过程中的问题追溯、性能分析、系统监控、故障预警等功能,提供参考依据。
-
模块功能:ulog日志系统是HaaS轻应用为开发者提供的日志记录系统,为基于HaaS轻应用的开发者提供日志分级控制,日志本地存储等服务。
-
ulog的分级(为了方便信息的筛选,五个级别向下包含,例如选择LOG_WARN可以输出warn + error + fatal三个级别)
常量 | 常量数值 | 常量说明 |
---|---|---|
LOG_DEBUG | 7 | 调试级别 debug + info + warn + error + fatal |
LOG_INFO | 6 | 信息级别 info + warn + error + fatal |
LOG_WARN | 4 | 警告级别 warn + error + fatal |
LOG_ERROR | 2 | 错误级别 error + fatal |
LOG_FATAL | 3 | 灾难级别 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日志 |
级别 | 日志标签 |
---|---|
调试级别 debug | ulog.LOG_DEBUG |
L信息级别 info | ulog.LOG_INFO |
警告级别 warn | ulog.LOG_WARN |
错误级别 error | ulog.LOG_ERROR |
灾难级别 fatal | ulog.LOG_FATAL |
ulog.setStdLogLevel(level) - 设置终端日志输出等级
函数功能: 设置终端日志输出等级
参数说明:
参数 | 类型 | 必选参数? | 说明 |
---|---|---|---|
level | int | 是 | 日志标签 |
返回值:成功:0,失败:-1。
ulog.setFsLogLevel(level) - 设置记录到文件系统的日志等级
函数功能:设置记录到文件系统的日志等级
参数说明:
参数 | 类型 | 必选参数? | 说明 |
---|---|---|---|
level | int | 是 | 日志标签 |
返回值:成功:0,失败:-1。
ulog.debug(tag, msg) - debug日志
函数功能:记录debug级别日志
参数说明:
参数 | 类型 | 必选参数? | 说明 |
---|---|---|---|
tag | string | 是 | 模块名 |
msg | string | 是 | 日志内容 |
ulog.info(tag, msg) - info日志
函数功能:记录info级别日志
参数说明:
参数 | 类型 | 必选参数? | 说明 |
---|---|---|---|
tag | string | 是 | 模块名 |
msg | string | 是 | 日志内容 |
ulog.warn(tag, msg) - warn日志
函数功能:记录warn级别日志
参数说明:
参数 | 类型 | 必选参数? | 说明 |
---|---|---|---|
tag | string | 是 | 模块名 |
msg | string | 是 | 日志内容 |
ulog.error(tag, msg) - error日志
函数功能:记录error级别日志
参数说明:
参数 | 类型 | 必选参数? | 说明 |
---|---|---|---|
tag | string | 是 | 模块名 |
msg | string | 是 | 日志内容 |
ulog.fatal(tag, msg) - fatal日志
函数功能:记录debug级别日志
参数说明:
参数 | 类型 | 必选参数? | 说明 |
---|---|---|---|
tag | string | 是 | 模块名 |
msg | string | 是 | 日志内容 |