用 dmsg 给 Elisp 加上结构化调试日志

💡 原文中文,约2700字,阅读约需7分钟。
📝

内容提要

dmsg.el 是一个用于 Elisp 的调试日志系统,解决了 *Messages* 缓冲区混乱、缺乏调用栈和日志级别的问题。它提供带时间戳和日志级别的日志记录,支持交互式浏览和过滤。用户可以通过简单的宏记录日志,自动捕获调用栈,并导出日志,同时可以拦截现有代码的消息和错误,方便调试。

🎯

关键要点

  • dmsg.el 是一个用于 Elisp 的调试日志系统,解决了 *Messages* 缓冲区混乱、缺乏调用栈和日志级别的问题。

  • dmsg 提供带时间戳、日志级别和自动调用栈捕获的调试日志系统,用户可以通过简单的宏记录日志。

  • 使用 dmsg 宏打日志,支持四个日志级别:debug、info、warn 和 error。

  • 日志会写入专用的 *DEBUG*Messages* buffer,避免与 *Messages* 混合。

  • dmsg 提供了 %= 格式符,自动将变量名作为标签输出,简化调试过程。

  • dmsg-mode 提供快捷键用于交互式浏览和过滤日志,支持按正则表达式过滤和导出日志。

  • 每条日志自动捕获调用栈,用户可以通过快捷键查看详细的调用链。

  • dmsg 支持拦截现有代码的 message 输出和捕获错误,方便调试第三方包和处理间歇性错误。

延伸问答

dmsg.el 是什么?

dmsg.el 是一个用于 Elisp 的调试日志系统,解决了 *Messages* 缓冲区混乱、缺乏调用栈和日志级别的问题。

如何使用 dmsg 记录日志?

用户可以通过 dmsg 宏记录日志,默认日志级别为 debug,支持指定日志级别为 debug、info、warn 和 error。

dmsg 如何处理调用栈信息?

每条日志自动捕获调用栈,用户可以通过快捷键查看详细的调用链,默认状态下调用栈是隐藏的。

dmsg 提供了哪些日志过滤功能?

dmsg 支持按正则表达式过滤日志,并可以设置最低显示级别,用户还可以导出可见条目到 .log 文件。

如何拦截现有代码的消息输出?

可以使用 dmsg-on-message 函数拦截 message 函数的调用,将匹配正则的输出转到 dmsg buffer 中。

dmsg 的 %= 格式符有什么用?

%= 格式符可以自动将变量名作为标签输出,简化调试过程,避免手动写标签。

➡️

继续阅读