用 dmsg 给 Elisp 加上结构化调试日志
内容提要
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 的 %= 格式符有什么用?
%= 格式符可以自动将变量名作为标签输出,简化调试过程,避免手动写标签。