如何记录在 ejabberd 中收到的原始 xml 节?

Posted

技术标签:

【中文标题】如何记录在 ejabberd 中收到的原始 xml 节?【英文标题】:How to log raw xml stanzas received in ejabberd? 【发布时间】:2015-10-10 11:23:04 【问题描述】:

在下面的代码中,应该将什么代码放入 on_filter_packet 以记录收到的原始节的

init([Host]) ->
        ejabberd_hooks:add(filter_packet, global, ?MODULE, on_filter_packet, 50),
        ok, #state.

on_filter_packet(From, To, Packet = Input) ->
    % HOW TO LOG RAW XML PACKET ?
        Packet.

编辑:

代码 ** ?INFO_MSG("Running filter. Debug: ~p ", [xml:element_to_string(Packet)]),** 将以下消息记录到文件 ** /var/log/ejabberd/ejabberd.日志**

=INFO REPORT==== 2015-10-11 02:02:18 ===
I(<0.9757.0>:my_module:46) : Running filter.  Debug: [60,"iq",
                                                      [[32,"type",61,39,
                                                        "error",39],
                                                       [32,"id",61,39,
                                                        "purpled0f53aba",39]],
                                                      62,
                                                      [[60,"ping",
                                                        [[32,"xmlns",61,39,
                                                          "urn:xmpp:ping",39]],
                                                        47,62],
                                                       [60,"error",
                                                        [[32,"code",61,39,
                                                          "503",39],
                                                         [32,"type",61,39,
                                                          "cancel",39]],
                                                        62,
                                                        [[60,
                                                          "service-unavailable",
                                                          [[32,"xmlns",61,39,
                                                            "urn:ietf:params:xml:ns:xmpp-stanzas",
                                                            39]],
                                                          47,62]],
                                                        60,47,"error",62]],
                                                      60,47,"iq",62] 

如何以原始xml格式记录收到的数据包?

【问题讨论】:

日志是什么意思?您可以通过各种机制记录任何内容,例如 error_logger:info_msg("Packet hit filter: ~w", Packet])。 @Michael 增加了关于该问题的更多描述。 【参考方案1】:

您可以使用 INFO_MSG 宏来展平您的列表:

on_filter_packet(From, To, Packet = Input) ->
    ?INFO_MSG("My packet: ~p ", [lists:flatten(Packet)]),
    Packet.

【讨论】:

它显示为 erlang 列表。我正在寻找类似于 exmpp_xml:document_to_binary/1 的输出的东西

以上是关于如何记录在 ejabberd 中收到的原始 xml 节?的主要内容,如果未能解决你的问题,请参考以下文章

WCF:如何手动记录原始 xml 消息内容?

如何记录通过 ejabberd 的消息

从 ejabberd 检索聊天记录时如何识别已发送和未发送的消息?

如何清除 Ejabberd 中的 MUC 历史记录

如何在 ejabberd 中设置用户密码? [关闭]

在 xmpp ejabberd 服务器上使用 Tsung 进行负载测试是不是会创建原始数据?