Wie aktiviere ich die detaillierte Protokollierung von Mosquitto Broker unter Windows 7?

8

Ich habe eine vorherige Frage und um einer Lösung näher zu kommen, möchte ich die Mosquitto Broker-Protokollierung unter Windows 7 aktivieren.

Ursprünglich habe ich den Broker wie folgt manuell gestartet:

mosquitto -p 1883 -v

-vbedeutet ausführliche Konsolenprotokollierung. Dies liefert jedoch nicht genügend Informationen, nur die folgende Zeile bei meinem Problem:

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

Ich habe versucht, das zu tun, was in dieser Antwort beschrieben ist . Hier ist der Protokollierungsteil der Konfigurationsdatei:

# 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

In diesem Fall habe ich den Broker wie folgt gestartet:

mosquitto -p 1883

-vOption würde die Konfigurationsdatei mit der Standardkonfiguration überschreiben, so dass ich das weggelassen habe. Aber ich sehe keine Protokollierung auf der Konsole.


Stattdessen habe stdoutich versucht, mich in eine Datei einzuloggen und die Konfiguration wie folgt geändert:

log_dest file d:\mosquitto.txt

Ich habe die Datei manuell erstellt und den Broker auf die gleiche Weise gestartet, aber ohne Erfolg.


Ich erhalte keine Protokollmeldung, wenn ich die -vOption nicht verwende . Wie soll es richtig gemacht werden?

Bence Kaulics
quelle
Gibt log_type debugoder log_type allgeben Sie weitere Informationen?
Aurora0001
1
@ Aurora0001 Egal was ich in der Konfigurationsdatei festgelegt habe, ich erhalte keine Protokollausgabe. Nur die -vOption enthält einige Protokolleinträge auf der Konsole (cmd), verwendet jedoch die Standardkonfiguration.
Bence Kaulics
@JimmyWestberg Während Ihre Antwort einen praktischen Protokollierungsmechanismus enthält, werden nur themenbezogene Informationen protokolliert, während ich ursprünglich an den Fehler- / Warnprotokollen des Moskito-Brokers interessiert war, die ich in der Moskito-Konfigurationsdatei nicht mehr konfigurieren konnte.
Bence Kaulics

Antworten:

8

Das ist was ich mache. Das folgende Skript wurde als timestampLog.vbs gespeichert:

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

Dann führe ich dies über die Kommandozeile aus:

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

Wo Sie den Pfad zu Ihrem Moskito-Ordner ändern und den Pfad "logfile.txt" nach Belieben ändern möchten.

Ob Sie danach suchen, weiß ich nicht, aber jemand anderem könnte die hier angebotene Lösung gefallen. So brechen Sie die Befehlszeile auf:

C:\Program Files\mosquitto> ist der lokale Ordner für Mosquitto

mosquitto_sub ist die EXE-Datei, die zum Abhören des Brokers verwendet wird

-t +/#„-t“ ist der EXE - Datei , die Informationen zu geben , um zu hören t opic von + / # , das alle Themen von Kunden. "#" würde alle Themen bedeuten, auch von Brokern erstellte Themen. \ $ SYS / # hört nur Brokerthemen ab. Es ist möglich, mehrere -t zu haben (glaube ich).

-v besteht darin, der EXE-Datei die Informationen zur ausführlichen Ausgabe der Themen zu geben, dh auch das Thema selbst auszugeben (nicht nur den Wert).

| ist, diesen ersten Befehl in den Skriptbefehl zu leiten.

cscript //nologo timestampLog.vbsist, cscript.exe mit dem zuvor geschriebenen vbs-Skript auszuführen. //nologoweist die Eingabeaufforderung an, die Ausgabeinformationen von cscript.exe in eine externe Datei anstatt in die Eingabeaufforderung selbst auszugeben.

2> weist die Eingabeaufforderung an, "StdErr" auszugeben (was wir dem Skript gesagt haben, dass alle Nachrichten in der .vbs-Datei weitergeleitet werden sollen).

C:\*USER*\Desktop\logfile.txtist der Pfad und der Dateiname der Ausgabe. Anstelle von .txt können Sie auch .log oder etwas anderes verwenden.

Jimmy Westberg
quelle
4

Die Antwort auf diese Frage: Wie aktiviere ich WebSockets unter Mosquitto unter Windows? beantwortete auch diese Frage.

Wie sich herausstellte, muss die Konfigurationsdatei des Mosquitto explizit in der Befehlszeile hinzugefügt werden.

Wenn Sie mosquitto über die Befehlszeile ausführen, müssen Sie mit der Option -c explizit auf die Konfigurationsdatei verweisen

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

Danach konnte ich zusätzliche Informationen über Socket-Fehlerereignisse oder ähnliches erhalten.

1489438223: Moskito-Version 1.4.10 (Erstellungsdatum 24.08.2016 21: 03: 24.73) wird gestartet

1489438223: Konfiguration von mosquitto.conf geladen.

1489438223: Öffnen des IPv6-Listen-Sockets an Port 1883.

1489438223: Fehler: Normalerweise ist nur eine Verwendung jeder Socket-Adresse (Protokoll / Netzwerkadresse / Port) zulässig.

1489438341: Moskito Version 1.4.10 (Erstellungsdatum 24.08.2016 21: 03: 24.73) wird gestartet

1489438341: Konfiguration von mosquitto.conf geladen.

1489438341: Öffnen des IPv6-Listen-Sockets an Port 1883.

1489438341: Öffnen des IPv4-Listen-Sockets an Port 1883.

1489438363: Neue Verbindung von 192.168.1.4 auf Port 1883.

1489438363: Neuer Client von 192.168.1.4 als root.1489438369381 (c1, k60, u'phone ') verbunden.

1489438363: Senden von CONNACK an root.1489438369381 (0, 0)

1489438363: ABONNIEREN von root.1489438369381 erhalten

1489438363: Raum / Luftfeuchtigkeit (QoS 1)

1489438363: root.1489438369381 1 Raum / Luftfeuchtigkeit

1489438363: Senden> SUBACK an root.1489438369381

1489438453: Client root.1489438369381 hat das Zeitlimit überschritten und die Verbindung getrennt.

1489438453: Socket-Fehler im Client-Stammverzeichnis.1489438369381, Verbindung wird getrennt.

Bence Kaulics
quelle
3
  1. Nutzdaten protokollieren

    Wenn Sie die Nutzdaten der PUBLISH-Nachricht protokollieren möchten, füge ich hier das Kundenprotokoll in mosquitto v1.5.3 souce hinzu:

    Quelle auf Git Hub .

    // nur ASCII-Nutzdaten anzeigen, Binärdaten haben möglicherweise das Terminal beschädigt.

  2. Verwendung in mosquitto.conf:

    Nutzlast log_type

  3. Ergebnis

    log werden:

    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))
    
Yurenchen
quelle
1
Was passiert, wenn Sie eine binäre Nutzlast veröffentlichen?
Hardillb
Oh, nur mit ASCII-Nutzlast getestet, binär vielleicht das Terminal kaputt, vergessen zu sagen
Yurenchen
2

Ich habe das vor einiger Zeit gefunden, kann es aber nicht dem ursprünglichen Autor zuordnen. Funktioniert hervorragend für vorhandene Protokolle, kann jedoch mit dieser Lösung nicht "tail -f":

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

Verwenden Sie dies unter Linux, sollte aber unter WSL / Cygwin funktionieren.

jshep321
quelle
2
Warum kann nicht tauschen Sie das catfür tail -f? und wenn nicht, dann ist die Katze überflüssig und Sie sollten grep einfach die Datei öffnen lassen
hardillb