如何记录在 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 节?的主要内容,如果未能解决你的问题,请参考以下文章