无控制台运行的Cinnamon小程序JS代码如何输出日志到文件或控制台
Cinnamon小程序开发日志输出方案
方案1:输出到系统日志(实时控制台查看)
- Cinnamon的cjs运行环境全局自带
log()方法,不需要引入任何额外模块,直接在业务代码里调用即可,支持传入任意类型参数(字符串、对象、数组、错误实例都可以),运行时会自动做序列化处理,示例:log("当前菜单加载状态:", loadStatus, menuList) - 实时查看日志的方式:打开任意终端执行
journalctl /usr/bin/cinnamon -f,就能看到滚动输出的实时日志流,和本地控制台效果完全一致,除了你自己打的日志,还能看到Cinnamon运行时的原生报错、完整调用栈,开发时全程开着这个终端窗口就行。 - 如果需要专门打印错误信息,用全局自带的
logError(err, "自定义标记")方法即可,输出的内容会带完整调用链路,排查异常比普通log方便很多。
方案2:输出到自定义日志文件
如果需要把日志单独归档、不跟系统日志混在一起,可以直接用内置的GLib模块实现文件写入,不需要装第三方依赖:
- 先在代码顶部引入GLib模块:
const GLib = imports.gi.GLib; - 封装一个通用的日志写入方法,参考代码如下:
// 日志存在用户家目录下,可自行修改路径 const CUSTOM_LOG_PATH = `${GLib.get_home_dir()}/my_cinnamon_applet.log`; function appLog(...args) { // 拼接带时间戳的日志内容 const logContent = `[${new Date().toLocaleString()}] ${args.join(' ')}\n`; // 追加写入文件,文件不存在时自动创建 let oldContent = ''; if (GLib.file_test(CUSTOM_LOG_PATH, GLib.FileTest.EXISTS)) { oldContent = GLib.file_get_contents(CUSTOM_LOG_PATH)[1]; } GLib.file_set_contents(CUSTOM_LOG_PATH, oldContent + logContent, -1); }
- 调用时直接传任意参数即可,比如
appLog("用户点击按钮", clickEventData),日志会写入你指定的路径,也可以在终端执行tail -f ~/my_cinnamon_applet.log实时查看新增日志。
注意:cjs运行环境默认没有挂载
console对象,不要直接写console.log(),会直接抛出异常中断小程序运行。每次修改代码后,记得在Cinnamon系统设置的疑难解答选项里重启Cinnamon,新的日志逻辑才会生效。
内容的提问来源于stack exchange,提问作者user1658543
相关产品推荐
相关产品推荐

