更改emqtt消息代理

时间:2016-07-28 09:12:48

标签: erlang

我正在为mqtt使用emqtt消息代理。 我不是一个erlang开发人员,对此没有任何了解。 我已经使用过这个基于erlang的代理,因为在线搜索了许多开源代理并且人们提出了关于基于erlang的服务器优势的建议。

现在我有点坚持使用emqttd_cli trace命令的输出。 它不是json类型,如果我使用perl解析器转换为json类型,我会得到延迟输出。

我想知道,我可以在哪个文件中更改跟踪日志输出格式。

1 个答案:

答案 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);