私はブローカーのトレースコードを見て、ファイルsrc/emqttd_protocol.erl
を見つけました。 trace/3
という名前のエクスポートされた関数には、必要なコードがあります。
Packet
という名前のこの関数の第2引数は、受信&ブローカ経由でデータを送信するという情報を持っています。必要なデータを取り込み、印刷方法に応じてフォーマットすることができます。
編集:サンプル変更されたコードは
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);
感謝を追加しましたが、私はトレースログから特定のクライアントのデータをキャプチャするためのサンプルコードを追加しました – shiva
非常に参考になる、ここではいくつかのサンプルコードスニペットを貼り付け、それが役に立てば幸い。 –