Comment activer la journalisation détaillée du courtier Mosquitto sur Windows 7?

8

J'ai une question précédente et pour me rapprocher d'une solution, je souhaite activer la journalisation du courtier Mosquitto sur Windows 7.

À l'origine, j'ai démarré le courtier manuellement comme suit:

mosquitto -p 1883 -v

-vsignifie la consignation détaillée de la console. Mais cela ne fournit pas suffisamment d'informations, seule la ligne suivante en cas de problème:

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

J'ai essayé de faire ce qui est décrit dans cette réponse . Voici la partie de journalisation du fichier de configuration:

# 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

Dans ce cas, j'ai démarré le courtier comme suit:

mosquitto -p 1883

-vL'option remplacerait le fichier de configuration par la configuration par défaut, j'ai donc laissé cela de côté. Mais je ne vois aucune connexion sur la console.


Au lieu de stdoutj'ai essayé de me connecter à un fichier et changé la configuration comme suit:

log_dest file d:\mosquitto.txt

J'ai créé le fichier manuellement et démarré le courtier de la même manière mais en vain.


Je ne reçois aucun message de journal si je n'utilise pas l' -voption. Comment faut-il procéder correctement?

Bence Kaulics
la source
Est - log_type debugou log_type allvous donner plus d' informations?
Aurora0001
1
@ Aurora0001 Peu importe ce que j'ai défini dans le fichier de configuration, je n'obtiens aucune sortie de journalisation. Seule l' -voption donne des entrées de journal sur la console (cmd) mais qui utilise la configuration par défaut.
Bence Kaulics
@JimmyWestberg Bien que votre réponse donne un mécanisme de journalisation pratique, elle enregistre uniquement les informations relatives au sujet alors que j'étais à l'origine intéressé par les journaux d'erreurs / d'avertissement du courtier en moustiques que je me fatiguais de configurer dans le fichier de configuration de moustique.
Bence Kaulics

Réponses:

8

C'est ce que je fais. Script suivant enregistré sous timestampLog.vbs:

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

Ensuite, je lance cela à partir de la ligne de commande:

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

Où vous voudrez peut-être changer le chemin d'accès à votre dossier de moustiques et changer le chemin d'accès "logfile.txt" à ce que vous voulez.

Si c'est ce que vous cherchez, je ne sais pas, mais quelqu'un d'autre pourrait aimer la solution fournie ici. Pour briser la ligne de commande:

C:\Program Files\mosquitto> est le dossier local de Mosquitto

mosquitto_sub est le fichier .exe utilisé pour écouter le courtier

-t +/#« -t » est de donner le fichier .exe les informations à écouter t TOPIC de + / # qui est tous les sujets de clients. "#" signifierait tous les sujets, même les sujets créés par le courtier. \ $ SYS / # n'écoutera que les sujets du courtier. Il est possible d'avoir plusieurs -t (je pense).

-v consiste à donner au fichier .exe les informations pour afficher les sujets de manière détaillée, c'est-à-dire également à sortir le sujet lui-même (non seulement sa valeur).

| consiste à diriger cette première commande dans la commande de script.

cscript //nologo timestampLog.vbsconsiste à exécuter cscript.exe avec le script vbs que nous avons écrit précédemment. //nologoindique à l'invite de ligne de commande de sortir les informations de sortie cscript.exe dans un fichier externe au lieu de l'invite elle-même.

2> indique à l'invite de ligne de commande de générer "StdErr" (c'est ce à quoi nous avons demandé au script de canaliser tous les messages dans le fichier .vbs).

C:\*USER*\Desktop\logfile.txtest le chemin et le nom de fichier de la sortie. Au lieu de .txt, vous pourriez envisager d'utiliser .log ou autre chose.

Jimmy Westberg
la source
4

La réponse à cette question: Comment activer WebSockets sur Mosquitto fonctionnant sous Windows? a également répondu à cette question.

Il s'est avéré que le fichier de configuration du Mosquitto devait être ajouté explicitement dans la ligne de commande.

Lorsque vous exécutez mosquitto à partir de la ligne de commande, vous devez pointer explicitement vers le fichier de configuration avec l'option -c

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

Après cela, j'ai pu obtenir des informations supplémentaires sur les événements d'erreur de socket ou autres.

1489438223: moustique version 1.4.10 (date de construction 24/08/2016 21: 03: 24.73) à partir

1489438223: configuration chargée à partir de mosquitto.conf.

1489438223: Ouverture du socket d'écoute ipv6 sur le port 1883.

1489438223: Erreur: une seule utilisation de chaque adresse de socket (protocole / adresse réseau / port) est normalement autorisée.

1489438341: version moustique 1.4.10 (date de construction 24/08/2016 21: 03: 24.73) à partir de

1489438341: configuration configurée à partir de mosquitto.conf.

1489438341: Ouverture du socket d'écoute ipv6 sur le port 1883.

1489438341: Ouverture du socket d'écoute ipv4 sur le port 1883.

1489438363: nouvelle connexion à partir de 192.168.1.4 sur le port 1883.

1489438363: nouveau client connecté à partir de 192.168.1.4 en tant que root.1489438369381 (c1, k60, u'phone ').

1489438363: Envoi de CONNACK à root.1489438369381 (0, 0)

1489438363: SUBSCRIBE reçu de la racine.1489438369381

1489438363: pièce / humidité (QoS 1)

1489438363: root.1489438369381 1 pièce / humidité

1489438363: Envoi> SUBACK vers root.1489438369381

1489438453: le client root.1489438369381 a dépassé le délai d'expiration, la déconnexion.

1489438453: erreur de socket sur le client root.1489438369381, déconnexion.

Bence Kaulics
la source
3
  1. enregistrer la charge utile

    Si vous voulez enregistrer la charge utile du message PUBLISH, ici j'ajoute un journal custome dans mosquitto v1.5.3 souce:

    Source sur Git Hub .

    // affiche uniquement la charge utile ASCII, les données binaires peuvent casser le terminal.

  2. utilisation dans mosquitto.conf:

    charge utile log_type

  3. résultat

    log devenir:

    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
la source
1
Que se passe-t-il lorsque vous publiez une charge utile binaire?
hardillb
oh, seulement testé avec la charge utile ascii, le binaire a peut-être cassé le terminal, oublié de dire
yurenchen
2

J'ai trouvé cela il y a quelque temps mais je ne peux pas l'attribuer à l'auteur original. Fonctionne très bien pour les journaux existants, mais ne peut pas «tail -f» avec cette solution:

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

L'utiliser sur Linux, mais devrait fonctionner sur WSL / cygwin.

jshep321
la source
2
Pourquoi ne pouvez-vous pas échanger le catpour tail -f? et sinon, le chat est redondant et vous devriez juste laisser grep ouvrir le fichier
hardillb