2016-07-28 21 views
0

私はemqttメッセージブローカーをmqttに使用しています。 私はerlangの開発者ではなく、その知識はありません。 私はこのerlangベースのブローカーを使用しました。なぜなら、多くのオープンソースブローカーのオンライン検索や、erlangベースのサーバーの利点についての人々からの提案があったからです。emqttメッセージブローカーのトレースログ形式を変更してください

今、私はemqttd_cli traceコマンドの出力を控えています。 そのjson型ではなく、json型に変換するためにperlパーサーを使用すると、出力が遅延しています。

私が知りたいのは、どのファイルでトレースログの出力形式を変更できるかです。

答えて

1

私はブローカーのトレースコードを見て、ファイル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); 
+0

感謝を追加しましたが、私はトレースログから特定のクライアントのデータをキャプチャするためのサンプルコードを追加しました – shiva

+0

非常に参考になる、ここではいくつかのサンプルコードスニペットを貼り付け、それが役に立てば幸い。 –

関連する問題