Come abilitare la registrazione dettagliata del broker Mosquitto su Windows 7?


8

Ho una domanda precedente e per avvicinarmi a una soluzione voglio abilitare la registrazione del broker Mosquitto su Windows 7.

Inizialmente ho avviato il broker manualmente come segue:

mosquitto -p 1883 -v

-vsignifica registrazione dettagliata della console. Ma questo non fornisce abbastanza informazioni, solo la seguente riga in caso di mio problema:

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

Ho provato a fare ciò che è descritto in questa risposta . Ecco la parte di registrazione del file di configurazione:

# 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 questo caso ho avviato il broker come segue:

mosquitto -p 1883

-vl'opzione sovrascriverebbe il file di configurazione con la configurazione predefinita, quindi l'ho lasciato fuori. Ma non vedo alcuna registrazione sulla console.


Invece di stdoutaver tentato di accedere a un file, ho modificato la configurazione come segue:

log_dest file d:\mosquitto.txt

Ho creato il file manualmente e avviato il broker allo stesso modo, ma senza alcun risultato.


Non visualizzo alcun messaggio di registro se non utilizzo l' -vopzione. Come dovrebbe essere fatto correttamente?


Ti dà log_type debugo log_type allti dà ulteriori informazioni?
Aurora0001

1
@ Aurora0001 Indipendentemente da ciò che ho impostato nel file di configurazione, non ottengo alcun output di registrazione. Solo l' -vopzione fornisce alcune voci di registro sulla console (cmd) ma che utilizza la configurazione predefinita.
Bence Kaulics,

@JimmyWestberg Mentre la tua risposta fornisce un comodo meccanismo di registrazione, registra solo le informazioni relative all'argomento mentre inizialmente ero interessato ai registri di errore / avviso del broker mosquitto che mi stancavo di configurare nel file di configurazione mosquitto.
Bence Kaulics

Risposte:


8

Questo è ciò che faccio. Script seguente salvato come timestampLog.vbs:

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

Quindi eseguo questo dalla riga di comando:

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

Dove vuoi cambiare il percorso della cartella mosquitto e cambiare il percorso "logfile.txt" come preferisci.

Se questo è quello che stai cercando, non lo so, ma a qualcun altro potrebbe piacere la soluzione fornita qui. Per interrompere la riga di comando:

C:\Program Files\mosquitto> è la cartella locale per Mosquitto

mosquitto_sub è il file .exe utilizzato per ascoltare il broker

-t +/#"-t" è quello di dare il file exe le informazioni per ascoltare t OPIC di + / # , che è tutti gli argomenti da parte dei clienti. "#" significherebbe tutti gli argomenti, anche quelli creati dal broker. \ $ SYS / # ascolterà solo gli argomenti del broker. È possibile avere più -t (penso).

-v è fornire al file .exe le informazioni per produrre in modo dettagliato gli argomenti, ovvero anche l'argomento stesso (non solo il suo valore).

| consiste nel reindirizzare questo primo comando nel comando script.

cscript //nologo timestampLog.vbsè eseguire cscript.exe con lo script vbs che abbiamo scritto in precedenza. //nologosta dicendo al prompt della riga di comando di generare le informazioni di output di cscript.exe in un file esterno invece del prompt stesso.

2> sta dicendo al prompt della riga di comando di generare "StdErr" (che è ciò a cui abbiamo detto allo script di incanalare tutti i messaggi nel file .vbs).

C:\*USER*\Desktop\logfile.txtè il percorso e il nome file dell'output. Invece di .txt potresti considerare di usare .log o qualcos'altro.


4

La risposta a questa domanda: Come abilitare WebSocket su Mosquitto in esecuzione su Windows? in realtà ha risposto anche a questa domanda.

Come si è scoperto, il file di configurazione di Mosquitto deve essere aggiunto esplicitamente nella riga di comando.

Quando esegui mosquitto dalla riga di comando devi puntare esplicitamente al file di configurazione con l'opzione -c

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

Dopo questo sono stato in grado di ottenere ulteriori informazioni sugli eventi di errore socket o simili.

1489438223: mosquitto versione 1.4.10 (data di costruzione 24/08/2016 21: 03: 24.73) a partire

1489438223: Config caricata da mosquitto.conf.

1489438223: Apertura del socket di ascolto ipv6 sulla porta 1883.

1489438223: Errore: è consentito un solo utilizzo di ciascun indirizzo socket (protocollo / indirizzo di rete / porta).

1489438341: mosquitto versione 1.4.10 (data di costruzione 24/08/2016 21: 03: 24.73) a partire

1489438341: Config caricata da mosquitto.conf.

1489438341: Apertura del socket di ascolto ipv6 sulla porta 1883.

1489438341: Apertura del socket di ascolto ipv4 sulla porta 1883.

1489438363: Nuova connessione da 192.168.1.4 sulla porta 1883.

1489438363: Nuovo client connesso da 192.168.1.4 come root.1489438369381 (c1, k60, u'phone ').

1489438363: Invio di CONNACK a root.1489438369381 (0, 0)

1489438363: Ricevuto ISCRIVITI da root.1489438369381

1489438363: ambiente / umidità (QoS 1)

1489438363: root.1489438369381 1 camera / umidità

1489438363: Invio> SUBACK a root.1489438369381

1489438453: Il client root.1489438369381 ha superato il timeout, disconnettendosi.

1489438453: Errore socket sul client root.1489438369381, disconnessione.


3
  1. log payload

    Se si desidera registrare il payload del messaggio PUBBLICO, qui aggiungo il registro personalizzato in mosquitto v1.5.3 souce:

    Fonte su Git Hub .

    // mostra solo il payload ASCII, i dati binari potrebbero aver rotto il terminale.

  2. utilizzo in mosquitto.conf:

    payload log_type

  3. risultato

    il registro diventa:

    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
Cosa succede quando pubblichi un payload binario?
hardillb

oh, testato solo con payload ascii, binario forse ha rotto il terminale,
ho

2

L'ho trovato qualche tempo fa, ma non riesco ad attribuire all'autore originale. Funziona benissimo per i log esistenti, ma non è possibile 'tail -f' con questa soluzione:

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

Usandolo su Linux, ma dovrebbe funzionare su WSL / cygwin.


2
Perché non puoi scambiare il catper tail -f? e in caso contrario il gatto è ridondante e dovresti semplicemente lasciare che grep apra il file
hardillb
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.