日志输出
一、简介
log.lua,重写了 lua 的 print 函数,定义了不同的标记等级,方便查找与定位问题,日志会输出到 Luatools 工具中。
二、演示功能概述
本教程教你如何用 Air724 开发板,输出不同等级,以便开发者能快速了解日志功能的使用。
三、准备硬件环境
3.1 开发板准备
使用 EVB_Air724 开发板,如下图所示:
淘宝购买链接:Air724UG-NFM 开发板淘宝购买链接 ;
此开发板的详细使用说明参考:Air724UG 产品手册 中的《EVB_Air724UG_AXX 开发板使用说明》,写这篇文章时最新版本的使用说明为:《EVB_Air724UG_A14 开发板使用说明》;开发板使用过程中遇到任何问题,可以直接参考这份使用说明文档。
api:https://doc.openluat.com/wiki/21?wiki_page_id=2068
3.2 数据通信线
USB 数据线一根(micro USB)。
3.3 PC 电脑
WIN7 以及以上版本的 WINDOWS 系统。
3.4 SIM 卡
中国大陆环境下,可以上网的 SIM 卡。一般来说,使用移动,电信,联通的物联网卡或者手机卡都行。
3.5 组装硬件环境
USB 数据线插入 USB 口,另一端与电脑相连,拨码开关全部拨到 ON,串口切换开关选择 UART1,USB 供电的 4V 对应开关拨至 ON 档,SIM 卡放到 SIM 卡槽中锁紧,如下图所示。
四、准备软件环境
4.1 下载调试工具
使用说明参考:Luatools 下载和详细使用
4.2 源码及固件
1.底层 core 下载
下载底层固件,并解压
链接:https://docs.openluat.com/air724ug/luatos/firmware/
如下图所示,红框的是我们要使用到的
2.本教程使用的 demo 见附件:
4.3 下载固件和脚本到开发板中
打开 Luatools,开发板上电开机,如开机成功 Luatools 会打印如下信息。
点击项目管理测试选项。
进入管理界面,如下图所示。
- 点击选择文件,选择底层固件,我的文件放在 D:\luatOS\Air724 路径中
- 点击增加脚本或资源文件,选择 之前下载的程序源码,如下图所示。
- 点击下载底层和脚本,下载完成如下图所示。
五、代码示例介绍
5.1 API 说明
API 接口 描述
log.trace() 输出 trace 级别的日志
log.debug() 输出 debug 级别的日志
log.info() 输出 info 级别的日志
log.warn() 输出 warn 级别的日志
log.error() 输出 error 级别的日志
log.fatal() 输出 fatal 级别的日志
log.openTrace() 开启或者关闭 print 的打印输出功能
在 log.lua 里定义了以下几个日志等级,取值越高,等级越高
常量 取值 释义
LOG_SILENT 0x00 静默,不输出任何日志
LOGLEVEL_TRACE 0x01 可输出 log.trace()以及更高等级的日志
LOGLEVEL_DEBUG 0x02 可输出 log.debug()以及更高等级的日志
LOGLEVEL_INFO 0x03 可输出 log.info()以及更高等级的日志
LOGLEVEL_WARN 0x04 可输出 log.warn()以及更高等级的日志
LOGLEVEL_ERROR 0x05 可输出 log.error()以及更高等级的日志
LOGLEVEL_FATAL 0x06 仅可输出 log.fatal()等级的日志
例子
- 设置日志等级 LOG_LEVEL = log.LOGLEVEL_TRACE
- 打印日志 使用 log.trace, log.debug, log.info, log.warn, log.error, log.fatal 来打印日志
5.2 main.lua 代码
本代码为主程序脚本,系统启动后首先会对 4G 网络进行配置,等待网络连接成功,然后加载测试模块。
加载日志功能模块,并且设置日志输出等级,输出四个等级的日志,日志等级排序从低到高为 debug < info < warn < error。
JSON 正确字符串的解析结果,定义了一个正确的(注意转义字符的使用)。然后定义了三个变量来接受 JSON 解析函数的返回值。local tjsondata,result,errinfo = json.decode(origin),第一个返回值是解析出来的内容,table 类型,第二个是解析结果,bool 类型,第三个是错误信息。如果一切成功解析出结果,你就可以打印出解析出的数据了,如果解析失败则会返回失败信息。这里只测试了正确的 JSON 字符串,可以更换 json.decode(origin)的参数,测试一下错误 JSON 字符串的情况。
--必须在这个位置定义PROJECT和VERSION变量
--PROJECT:ascii string类型,可以随便定义,只要不使用,就行
--VERSION:ascii string类型,如果使用Luat物联云平台固件升级的功能,必须按照"X.X.X"定义,X表示1位数字;否则可随便定义
PROJECT = "log"
VERSION = "2.0.0"
--加载日志功能模块,并且设置日志输出等级
--如果关闭调用log模块接口输出的日志,等级设置为log.LOG_SILENT即可
require "log"
LOG_LEVEL = log.LOGLEVEL_TRACE
--[[
如果使用UART输出日志,打开这行注释的代码"--log.openTrace(true,1,115200)"即可,根据自己的需求修改此接口的参数
如果要彻底关闭脚本中的输出日志(包括调用log模块接口和Lua标准print接口输出的日志),执行log.openTrace(false,第二个参数跟调用openTrace接口打开日志的第二个参数相同),例如:
1、没有调用过sys.opntrace配置日志输出端口或者最后一次是调用log.openTrace(true,nil,921600)配置日志输出端口,此时要关闭输出日志,直接调用log.openTrace(false)即可
2、最后一次是调用log.openTrace(true,1,115200)配置日志输出端口,此时要关闭输出日志,直接调用log.openTrace(false,1)即可
]]
--log.openTrace(true,1,115200)
require "sys"
require "net"
--每1分钟查询一次GSM信号强度
--每1分钟查询一次基站信息
net.startQueryAll(60000, 60000)
--此处关闭RNDIS网卡功能
--否则,模块通过USB连接电脑后,会在电脑的网络适配器中枚举一个RNDIS网卡,电脑默认使用此网卡上网,导致模块使用的sim卡流量流失
--如果项目中需要打开此功能,把ril.request("AT+RNDISCALL=0,1")修改为ril.request("AT+RNDISCALL=1,1")即可
--注意:core固件:V0030以及之后的版本、V3028以及之后的版本,才以稳定地支持此功能
ril.request("AT+RNDISCALL=0,1")
--加载控制台调试功能模块(此处代码配置的是uart2,波特率115200)
--此功能模块不是必须的,根据项目需求决定是否加载
--使用时注意:控制台使用的uart不要和其他功能使用的uart冲突
--使用说明参考demo/console下的《console功能使用说明.docx》
--require "console"
--console.setup(2, 115200)
--加载网络指示灯和LTE指示灯功能模块
--根据自己的项目需求和硬件配置决定:1、是否加载此功能模块;2、配置指示灯引脚
--合宙官方出售的Air720U开发板上的网络指示灯引脚为pio.P0_1,LTE指示灯引脚为pio.P0_4
require "netLed"
pmd.ldoset(2,pmd.LDO_VLCD)
netLed.setup(true,pio.P0_1,pio.P0_4)
--网络指示灯功能模块中,默认配置了各种工作状态下指示灯的闪烁规律,参考netLed.lua中ledBlinkTime配置的默认值
--如果默认值满足不了需求,此处调用netLed.updateBlinkTime去配置闪烁时长
--LTE指示灯功能模块中,配置的是注册上4G网络,灯就常亮,其余任何状态灯都会熄灭
--加载错误日志管理功能模块【强烈建议打开此功能】
--如下2行代码,只是简单的演示如何使用errDump功能,详情参考errDump的api
require "errDump"
errDump.request("udp://dev_msg1.openluat.com:12425", nil, true)
--加载远程升级功能模块【强烈建议打开此功能,如果使用了阿里云的OTA功能,可以不打开此功能】
--如下3行代码,只是简单的演示如何使用update功能,详情参考update的api以及demo/update
--PRODUCT_KEY = "v32xEAKsGTIEQxtqgwCldp5aPlcnPs3K"
--require "update"
--update.request()
--加载 测试模块
sys.taskInit(function ()
sys.wait(1000) -- 免得看不到日志
LOG_LEVEL = log.LOGLEVEL_TRACE
log.info("LOG_LEVEL",LOG_LEVEL)
--实验1:输出四个等级的日志,日志等级排序从低到高为 debug < info < warn < error
log.trace("我是trace级别的日志")
log.debug("我是debug级别的日志")
log.info("我是info级别的日志")
log.warn("我是warn级别的日志")
log.error("我是error级别的日志")
log.fatal("我是fatal级别的日志")
--实验2:输出INFO及更高级别日志,即debug日志不输出
LOG_LEVEL = log.LOGLEVEL_INFO
--LOG_LEVEL = log.LOGLEVEL_TRACE
log.info("LOG_LEVEL",LOG_LEVEL)
-- 这条debug级别的日志不会输出
log.trace("我是trace级别的日志")
log.debug("我是debug级别的日志")
log.info("我是info级别的日志")
log.warn("我是warn级别的日志")
log.error("我是error级别的日志")
log.fatal("我是fatal级别的日志")
--实验3:通过日志输出变量内容
local myInteger = 42
log.info("Integer", myInteger)
end)
--启动系统框架
sys.init(0, 0)
sys.run()
六、开机调试
6.1 开发板开机
连接好硬件并下载固件后,启动 Luatools 软件,系统运行信息将显示在界面中。红框中为开发板连接到 PC 机后正常打印的信息,如下图所示。
6.2 功能调试
1.输出 TRACE 及更高级别日志, LOG_LEVEL = log.LOGLEVEL_TRACE,即全部日志输出。
2.输出 INFO 及更高级别日志, LOG_LEVEL = log.LOGLEVEL_INFO,即 debug 日志不输出。
七、常见问题
7.1 为什么 usb 端口抓日志,开机部分的日志会丢失?
core 开机后,usb 端口枚举需要时间,在 usb 端口枚举出来之前,Lua 脚本的日志已经开始输出了,这些在 usb 端口枚举出来之前输出的脚本日志就会丢失
如果不想丢失开机部分的脚本日志,可以在烧录程序时,Luatools 界面选择串口输出日志
同时 pc 端使用串口线连接模块对应的串口即可
给读者的话
本篇文章由
杨超
开发;本篇文章描述的内容,如果有错误、细节缺失、细节不清晰或者其他任何问题,总之就是无法解决您遇到的问题;
请登录合宙技术交流论坛,点击文档找错赢奖金-Air724UG-LuatOS-软件指南-通用工具库-日志输出;
用截图标注+文字描述的方式跟帖回复,记录清楚您发现的问题;
我们会迅速核实并且修改文档;
同时也会为您累计找错积分,您还可能赢取月度找错奖金!