Windows 7でMosquittoブローカーの詳細なログを有効にする方法は?


8

前の質問があります。解決策に近づくために、Windows 7でMosquittoブローカーのログを有効にしたいと思います。

もともと私は次のようにブローカーを手動で起動しました:

mosquitto -p 1883 -v

-v詳細なコンソールロギングを意味します。しかし、これは十分な情報を提供しません、私の問題の場合には次の行のみを提供します:

1486293976: Socket error on client <unknown>, disconnecting.

私はこの答えで説明されていることをやってみました。設定ファイルのログ部分は次のとおりです。

# Note that if the broker is running as a Windows service it will default to
# "log_dest none" and neither stdout nor stderr logging is available.
# Use "log_dest none" if you wish to disable logging.
log_dest stdout

# If using syslog logging (not on Windows), messages will be logged to the
# "daemon" facility by default. Use the log_facility option to choose which of
# local0 to local7 to log to instead. The option value should be an integer
# value, e.g. "log_facility 5" to use local5.
#log_facility

# Types of messages to log. Use multiple log_type lines for logging
# multiple types of messages.
# Possible types are: debug, error, warning, notice, information, 
# none, subscribe, unsubscribe, websockets, all.
# Note that debug type messages are for decoding the incoming/outgoing
# network packets. They are not logged in "topics".
log_type error
log_type warning
log_type notice
log_type information

# Change the websockets logging level. This is a global option, it is not
# possible to set per listener. This is an integer that is interpreted by
# libwebsockets as a bit mask for its lws_log_levels enum. See the
# libwebsockets documentation for more details. "log_type websockets" must also
# be enabled.
#websockets_log_level 0

# If set to true, client connection and disconnection messages will be included
# in the log.
connection_messages true

# If set to true, add a timestamp value to each log message.
log_timestamp true

この場合、次のようにブローカーを起動しました。

mosquitto -p 1883

-vオプションはデフォルトの設定で設定ファイルを上書きするので、省略しました。しかし、コンソールにログが表示されません。


stdoutファイルにログインしようとする代わりに、次のように構成を変更しました。

log_dest file d:\mosquitto.txt

ファイルを手動で作成し、ブローカーを同じ方法で起動しましたが、使用できません。


この-vオプションを使用しないと、ログメッセージが表示されません。それはどのように正しく行われるべきですか?


log_type debuglog_type allあなたに多くの情報を与えますか?
Aurora0001

1
@ Aurora0001構成ファイルで何を設定しても、ログ出力がありません。-vオプションのみがコンソール(cmd)にいくつかのログエントリを提供しますが、デフォルトの構成を使用します。
Bence Kaulics 2017

@JimmyWestbergあなたの答えは便利なロギングメカニズムを提供しますが、私が最初にmosquitto構成ファイルで構成するのに疲れたmosquittoブローカーのエラー/警告ログに興味があった間、それはトピック関連情報のみをログに記録します。
Bence Kaulics 2017年

回答:


8

これが私がすることです。timestampLog.vbsとして保存された次のスクリプト:

Dim str
Do While Not WScript.StdIn.AtEndOfStream
  str = WScript.StdIn.ReadLine
  WScript.StdErr.WriteLine "[" & now & "]" & str
Loop

次に、これをコマンドラインから実行します。

C:\Program Files\mosquitto>mosquitto_sub -t +/# -v | cscript //nologo timestampLog.vbs 2> C:\*USER*\Desktop\logfile.txt

mosquittoフォルダーへのパスを変更し、 "logfile.txt"パスを任意に変更したい場合。

これがあなたが探しているものであるかどうかはわかりませんが、他の誰かがここで提供されているソリューションを気に入っている可能性があります。コマンドラインを分解するには:

C:\Program Files\mosquitto> Mosquittoのローカルフォルダーです

mosquitto_sub ブローカーのリッスンに使用される.exeファイルです

-t +/#「-t」は、クライアントからのすべてのトピックである+ /#のt opic をリッスンするための情報を.exeファイルに与えることです。「#」はすべてのトピックを意味し、ブローカーが作成したトピックも含みます。\ $ SYS /#はブローカートピックのみをリッスンします。複数の-tを指定することは可能です(私はそう思います)。

-v 詳細なトピックを出力するための情報を.exeファイルに与えることです。つまり、トピック自体も出力します(値だけではありません)。

| この最初のコマンドをスクリプトコマンドにパイプ処理します。

cscript //nologo timestampLog.vbs以前に記述したvbsスクリプトを使用してcscript.exeを実行します。 //nologoコマンドラインプロンプトに対して、cscript.exeの出力情報を、プロンプト自体ではなく外部ファイルに出力するように指示しています。

2> コマンドラインプロンプトに "StdErr"を出力するように指示しています(これは、すべてのメッセージを.vbsファイルに送るようにスクリプトに指示したものです)。

C:\*USER*\Desktop\logfile.txt出力のパスとファイル名です。.txtの代わりに、.logなどを使用することを検討してください。


4

この質問の答えWindowsで実行されているMosquittoでWebSocketを有効にする方法は?実際にこの質問にも答えました。

結局のところ、Mosquittoの設定ファイルはコマンドラインで明示的に追加する必要があります。

コマンドラインからmosquittoを実行するときは、-cオプションで構成ファイルを明示的に指定する必要があります

mosquitto -v -c /path/to/mosquitto.conf

この後、ソケットエラーイベントなどに関する追加情報を取得できました。

1489438223:mosquittoバージョン1.4.10(ビルド日付24/08/2016 21:03:24.73)開始

1489438223:mosquitto.confから読み込まれた設定。

1489438223:ポート1883でipv6待機ソケットを開いています。

1489438223:エラー: 通常、各ソケットアドレス(プロトコル/ネットワークアドレス/ポート)の使用は1つだけ許可されています。

1489438341:mosquittoバージョン1.4.10(ビルド日付24/08/2016 21:03:24.73)開始

1489438341:mosquitto.confから読み込まれた設定。

1489438341:ポート1883でipv6待機ソケットを開いています。

1489438341:ポート1883でipv4待機ソケットを開いています。

1489438363:ポート1883の192.168.1.4からの新しい接続。

1489438363:192.168.1.4からroot.1489438369381(c1、k60、u'phone ')として接続された新しいクライアント。

1489438363:ルートにCONNACKを送信します。1489438369381(0、0)

1489438363:ルートからSUBSCRIBEを受信しました。1489438369381

1489438363:部屋/湿度(QoS 1)

1489438363:root.1489438369381 1部屋/湿度

1489438363:送信中> SUBACKをroot.1489438369381に

1489438453:クライアントroot.1489438369381がタイムアウトを超えたため、切断します。

1489438453:クライアントルートでのソケットエラー。1489438369381、切断中。


3
  1. ログのペイロード

    PUBLISHメッセージのペイロードをログに記録したい場合は、ここでmosquitto v1.5.3にカスタムログを追加します。

    Git Hubのソース

    // ASCIIペイロードのみを表示し、バイナリデータが端末を壊した可能性があります

  2. mosquitto.confでの使用:

    log_typeペイロード

  3. 結果

    ログは:

    1542293777: Received PUBLISH from client_20454 (d0, q0, r0, m0, '$rpc/device1/client_20454/25MhY4xUwiMZIuytfb89Vjrh4QU=/req', ... (64 bytes))
    1542293777: > payload: '{"method":"ServerExposed.Ping","params":[{"Num":20454}],"id":0}'
    1542293777: Sending PUBLISH to device1 (d0, q0, r0, m0, '$rpc/device1/client_20454/25MhY4xUwiMZIuytfb89Vjrh4QU=/req', ... (64 bytes))
    
    1542293777: Received PUBLISH from device1 (d0, q0, r0, m0, '$rpc/device1/client_20454/25MhY4xUwiMZIuytfb89Vjrh4QU=/res', ... (57 bytes))
    1542293777: > payload: '{"id":0,"result":{"Done":true,"Num":20454},"error":null}'
    1542293777: Sending PUBLISH to client_20454 (d0, q0, r0, m0, '$rpc/device1/client_20454/25MhY4xUwiMZIuytfb89Vjrh4QU=/res', ... (57 bytes))
    

1
バイナリペイロードを公開するとどうなりますか?
hardillb 2018年

ああ、ASCIIペイロードでのみテストされました。バイナリはおそらくターミナルを壊しました、言うのを忘れました
yurenchen

2

しばらく前にこれを見つけましたが、元の作者に帰属することはできません。既存のログには適していますが、このソリューションでは「tail -f」できません。

sudo cat /var/log/mosquitto/mosquitto.log | grep -v datab|perl -pe 's/(\d+)/localtime($1)/e'

これをLinuxで使用しますが、WSL / cygwinで動作するはずです。


2
なぜあなたは入れ替えることができないcatためにtail -f?そうでない場合は、猫は冗長であり、grepにファイルを開かせるだけです
hardillb
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.