如何配置Prosody IM以完整记录收发的详细XMPP消息
解决方案
你当前Prosody默认debug日志仅输出XMPP节的根标签属性,默认会省略内部子元素,可通过以下方式配置输出完整XMPP消息:
方案一:使用官方社区模块mod_log_all_stanzas(推荐)
这是最轻量化的非侵入式方案:
- 第一步:下载
mod_log_all_stanzas模块,放入Prosody的自定义模块目录(默认通常为/usr/lib/prosody/modules-community或你自行配置的plugin_paths指向的目录) - 第二步:修改Prosody主配置文件,在全局配置或你对应的MUC组件配置块中添加模块加载声明:
modules_enabled = { -- 保留你原有已加载的其他模块,新增以下行 "log_all_stanzas"; } -- 可选配置:仅打印指定MUC域名的消息,避免日志量过大,将下方域名替换为你实际的MUC服务域名 log_all_stanzas_filter = function (stanza) return stanza.attr.to and stanza.attr.to:match("conference%.example%.com$") end
- 第三步:重启Prosody服务,此时debug日志中会输出完整的XMPP节内容,包含所有子元素、命名空间等信息。
方案二:修改核心日志逻辑(不推荐)
如果你不想额外安装模块,可直接修改Prosody核心代码的打印逻辑:
找到Prosody安装目录下的core/stanza.lua文件,修改其中的stanza转字符串方法,移除默认的长内容截断规则即可,该方案会在Prosody版本升级后失效,仅建议临时调试使用。
注意:开启全量XMPP节日志会大幅提升日志写入量,生产环境调试务必添加过滤规则,避免占用过多磁盘空间。
内容的提问来源于stack exchange,提问作者hcnak
相关产品推荐
相关产品推荐

