我正在为mqtt使用emqtt消息代理。 我不是一个erlang开发人员,对此没有任何了解。 我已经使用过这个基于erlang的代理,因为在线搜索了许多开源代理并且人们提出了关于基于erlang的服务器优势的建议。
现在我有点坚持使用emqttd_cli trace命令的输出。 它不是json类型,如果我使用perl解析器转换为json类型,我会得到延迟输出。
我想知道,我可以在哪个文件中更改跟踪日志输出格式。
答案 0 :(得分:1)
我查看了代理的跟踪代码,找到了一个文件src/emqttd_protocol.erl
。名为trace/3
的导出函数具有您需要的代码。
此函数的第二个参数,名为Packet
,具有receive& amp;的信息。通过经纪人发送数据。您可以从中获取所需的数据,并根据您的打印方式进行格式化。
编辑:添加了修改后的代码示例
trace(recv, Packet, ProtoState) ->
PacketHeader = Packet#mqtt_packet.header,
HostInfo = esockd_net:format(ProtoState#proto_state.peername),
%% PacketInfo = {ClientId, Username, ClientIP, ClientPort, Payload, QoS, Retain}
PacketInfo = {ProtoState#proto_state.client_id, ProtoState#proto_state.username, lists:nth(1, HostInfo), lists:nth(3, HostInfo), Packet#mqtt_packet.payload, PacketHeader#mqtt_packet_header.qos, PacketHeader#mqtt_packet_header.retain},
?LOG(info, "Data Received ~s", [PacketInfo], ProtoState);