资讯动态

如何在 KOReader 代码中加入 logger.dbg 调试输出并查看 crash.log 日志

发布时间:2026/9/12 8:33:14 来源:尧图企业网站定制
如何在 KOReader 代码中加入 logger.dbg 调试输出并查看 crash.log 日志【免费下载链接】koreaderAn ebook reader application supporting PDF, DjVu, EPUB, FB2 and many more formats, running on Cervantes, Kindle, Kobo, PocketBook and Android devices项目地址: https://gitcode.com/GitHub_Trending/ko/koreader如果你在 KOReader 的 Lua 代码里加了logger.dbg(...)调用但运行时看不到任何输出原因通常是日志级别没有打开frontend/logger.lua 在加载末尾默认执行Logger:setLevel(LOG_LVL.info)级别为info时dbg函数是 noop什么都不会打印。这篇文章介绍如何在代码中写入logger.dbg调试输出、如何打开 debug 日志级别以及最终去哪里核对 doc/Hacking.md 所说的crash.log日志。在代码中写入 logger.dbg 调试输出doc/Hacking.md 给出的标准用法是local logger require(logger) a {1, 2, 3} logger.dbg(table a: , a)两个参数要点来自 frontend/logger.lua所有经过logger.dbg打印的行都以DEBUG开头前缀定义在LOG_PREFIX表中dbg DEBUG、info INFO 、warn WARN 、err ERROR。传进去的 table 会被 serpent 序列化后打印嵌套最多展开到DEFAULT_DUMP_LVL值为 10层缩进两个空格。打开 debug 日志级别logger.dbg只有在日志级别被设为dbg时才会真正输出。frontend/logger.lua 中的Logger:setLevel(new_lvl)会把小于等于指定级别的所有级别切换为真实函数其余置为 noop例如 frontend/dbg.lua 的Dbg:turnOn()就是调用logger:setLevel(logger.levels.dbg)来开启 debug 日志的。实际开发中有三条打开方式方式一启动参数-dreader.lua 的启动参数支持-d start in debug mode -v debug in verbose mode也就是以./reader.lua -d启动进入 debug 模式-v再叠加 verbose 模式。-d会调用dbg:turnOn()-v调用dbg:setVerbose(true)。注意 reader.lua 中的注释debug 选项要在加载其他模块之前就检查并打开否则部分模块加载期的 DEBUG 输出会丢失所以不要自己改成在业务模块里才开启。方式二设置项debugreader.lua 启动时读取设置文件if G_reader_settings:isTrue(debug) then dbg:turnOn() end if G_reader_settings:isTrue(debug) and G_reader_settings:isTrue(debug_verbose) then dbg:setVerbose(true) end即数据目录下settings.reader.lua中debug为 true 时自动进入 debug 模式。这个设置也可以通过界面操作见方式三两条路径最终写入的是同一个设置项。方式三界面菜单切换设置菜单里的Developer options子菜单中有 “Enable debug logging” 选项切换时翻转debug设置并调用dbg:turnOn()/dbg:turnOff()“Enable verbose debug logging” 只在debug已开启时可用见 frontend/apps/filemanager/filemanagermenu.lua。通用信息菜单中的 “Report a bug” 条目提供 “Enable/Disable verbose logging” 按钮会同时打开debug与debug_verbose两个设置并提示重启 KOReader其说明文字也会直接给出 crash.log 的路径见 frontend/ui/elements/common_info_menu_table.lua。查看 crash.log 中的输出在大多数目标平台上日志输出保存在koreader目录的crash.log中。平台启动脚本负责把标准输出重定向到该文件例如 platform/kindle/koreader.sh./reader.lua $ crash.log 21而 frontend/logger.lua 在非 Android 平台下正是通过io.write写标准输出的因此打开 debug 模式后你在代码里写的logger.dbg(...)会随启动流程一并落盘到 crash.log。doc/Hacking.md 给出的文档示例输出为04/06/17-21:44:53 DEBUG foo以上为文档中的示例行实际时间戳与内容以你的运行结果为准。验证方式就是打开koreader目录下的crash.log找到带DEBUG前缀、包含你写入内容的行。生产代码中的性能注意doc/Hacking.md 特别提醒在 Lua 中函数参数总是会被求值即使当前级别是 nooplogger.dbg的参数也已经计算过了。因此不要把复杂计算内联在 logger 函数的参数里如果确实需要把整段逻辑放在dbg.is_on分支后面。仓库里的现成例子见 frontend/device/input.lua 中对按键事件日志的处理if DEBUG.is_on then if event.type C.EV_KEY then logger.dbg(string.format( key event code: %d (%s), value: %s, time: %d.%06d, ...)) end end限制与边界日志级别默认为info不开启 debug 模式时logger.dbg不产生任何输出这是“加了日志却看不到”的常见原因。crash.log的保存适用于“大多数目标平台”doc/Hacking.md 原文。Android 平台下 frontend/logger.lua 不走io.write而是把各级别映射到android.LOGV/LOGI/LOGW/LOGE日志进入 Android 的日志通道而非crash.logAndroid 上要改用对应的日志查看方式。调试完成后记得把debug设置关回菜单中取消勾选或重新进入 Report a bug 条目切换 verbose logging否则所有DEBUG级输出会持续写入日志。【免费下载链接】koreaderAn ebook reader application supporting PDF, DjVu, EPUB, FB2 and many more formats, running on Cervantes, Kindle, Kobo, PocketBook and Android devices项目地址: https://gitcode.com/GitHub_Trending/ko/koreader创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价