当前位置: 首页 > news >正文

OpenWrt | 如何在 ucode 脚本中打印日志

文章目录

  • 一、问题背景
  • 二、实现方法

一、问题背景

OpenWrtucode 是一种轻量级脚本语言,专为嵌入式系统和 OpenWrt 环境设计。它的语法类似于 JavaScript,并提供了丰富的内置功能,使其适用于系统配置、Web 开发(如 LuCI 界面)以及嵌入式脚本任务。

例如一段标准的 ucode 脚本示例如下:

'use strict';let ubus = require('ubus').connect();// 返回一个方法列表
return {// 定义一个 ubus 对象名example: {// 定义一个方法method: {call: function() {return { message: "Hello World" };}}}
}

需要将此脚本放到 OpenWrt 系统的 /usr/share/rpcd/ucode 文件夹下,随后使用以下命令重启 rpcd 服务

/etc/init.d/rpcd restart

此时所编写的 example 服务即被注册进了 ubus 中,通过命令 ucode list 可以看到刚刚新建的 example在这里插入图片描述

随后使用 ubus call example method 调用刚刚新增的方法,即可得到 Hello World 的输出
在这里插入图片描述

那么我们在编辑相关 ucode 脚本时,我们希望有日志打印,知道我们程序的运行状态,方便我们的调试,因此本文将详细介绍如何在 ucode 脚本中添加日志打印的方法。

二、实现方法

参考:

  • System logging functions: https://ucode.mein.io/module-log.html
  • OpenWrt Ucode Example: https://github.com/openwrt/rpcd/blob/master/examples/ucode/example-plugin
  • OpenWrt ubus:https://openwrt.org/docs/techref/ubus

首先,从 System logging functions 中的介绍可以知道,只要导入 log 包,调用 log.ulog(LOG_INFO, "Log message"); 即可打印日志,此时日志将输出到 OpenWrt 的日志中。
在这里插入图片描述

同时,使用 ulog_open(ULOG_SYSLOG, LOG_DAEMON, "LOG TAG"); 可以修改此脚本的打印的 TAG,方便在日志中筛选,例如有如下代码,分别打印四种级别的日志:

'use strict';// 导入日志包
import * as log from 'log';let ubus = require('ubus').connect();return {example: {method: {call: function() {// 修改日志打印的TAG 为 EXAMPLE-TAGlog.ulog_open(log.ULOG_SYSLOG, log.LOG_DAEMON, "EXAMPLE-TAG");// 打印 DEBUG 级别的日志log.ulog(log.LOG_DEBUG, "This is DEBUG log");// 打印 INFO 级别的日志log.ulog(log.LOG_INFO, "This is INFO log");// 打印 WARNING 级别的日志log.ulog(log.LOG_WARNING, "This is WARNING log");// 打印 ERROR 级别的日志log.ulog(log.LOG_ERR, "This is ERROR log");// 当调用了 ulog_open 需要调用 ulog_close, 还原系统日志的配置, 避免前面设置的 TAG 影响到其他日志打印log.ulog_close();return { message: "Hello World" };}}}
}

此时重启 rpcd 服务,执行定义的 ucode 方法,在系统日志中即可以看到相关的日志打印。
在这里插入图片描述

http://www.dtcms.com/a/312468.html

相关文章:

  • 评测PHOCR中文文本识别模型
  • MySQL半同步复制机制详解:AFTER_SYNC vs AFTER_COMMIT 的优劣与选择
  • Python 程序设计讲义(57):Python 的函数——可变参数的使用
  • 专网内网IP攻击防御:从应急响应到架构加固
  • 老电脑PE下无法读取硬盘的原因
  • 【LeetCode刷题指南】--二叉树的后序遍历,二叉树遍历
  • 7.14.散列表的基本概念(散列表又名哈希表,Hash Table)
  • 01.Redis 概述
  • 嵌入式通信协议解析(基于红外NEC通信协议)
  • 旧笔记本电脑如何安装飞牛OS
  • 前端工程化:npmvite
  • 解剖 .NET 经典:从 Component 到 BackgroundWorker
  • python基础语法6,简单文件操作(简单易上手的python语法教学)(课后习题)
  • Jetpack Compose for XR:构建下一代空间UI的完整指南
  • Hyper-V + Centos stream 9 搭建K8s集群(二)
  • MySQL 索引失效的场景与原因
  • k8s+isulad 国产化技术栈云原生技术栈搭建2-crictl
  • Linux进程启动后,监听端口几分钟后消失之问题分析
  • MySQL 事务原理 + ACID笔记
  • HiveMQ核心架构思维导图2024.9(Community Edition)
  • Educational Codeforces Round 171 (Rated for Div. 2)
  • 06.Redis 配置文件说明
  • 【openlayers框架学习】十一:openlayers实战功能介绍与前端设计
  • Azure DevOps 中的代理
  • Azure DevOps — Kubernetes 上的自托管代理 — 第 4 部分
  • 2025年6月电子学会青少年软件编程(C语言)等级考试试卷(七级)
  • Mongo索引
  • 0基礎網站開發技術教學(二) --(前端篇 2)--
  • 【超分辨率专题】PiSA-SR:单步Diff超分新突破,即快又好,还能在线调参
  • 信息量,惊奇度,熵、KL散度(相对熵),交叉熵、最大似然估计MLE与最小化交叉熵的等价证明、