¿Cómo habilitar el registro detallado del agente Mosquitto en Windows 7?

8

Tengo una pregunta anterior y para acercarme a una solución, quiero habilitar el inicio de sesión de Broker Mosquitto en Windows 7.

Originalmente comencé el corredor manualmente de la siguiente manera:

mosquitto -p 1883 -v

-vsignifica el registro detallado de la consola. Pero esto no proporciona suficiente información, solo la siguiente línea en caso de mi problema:

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

He intentado hacer lo que se describe en esta respuesta . Aquí está la parte de registro del archivo de configuración:

# 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

En este caso, he iniciado el corredor de la siguiente manera:

mosquitto -p 1883

-vLa opción anularía el archivo de configuración con la configuración predeterminada, así que lo he dejado fuera. Pero no veo ningún registro en la consola.


En lugar de stdouthaber intentado iniciar sesión en un archivo, y cambié la configuración de la siguiente manera:

log_dest file d:\mosquitto.txt

Creé el archivo manualmente y comencé el corredor de la misma manera, pero fue en vano.


No recibo ningún mensaje de registro si no uso la -vopción. ¿Cómo debe hacerse correctamente?

Bence Kaulics
fuente
¿ Te da log_type debugo log_type allte da más información?
Aurora0001
1
@ Aurora0001 No importa lo que establezca en el archivo de configuración, no obtengo resultados de registro. Solo la -vopción proporciona algunas entradas de registro en la consola (cmd) pero que usa la configuración predeterminada.
Bence Kaulics
@JimmyWestberg Si bien su respuesta proporciona un mecanismo de registro conveniente, solo registra información relacionada con el tema, mientras que originalmente estaba interesado en los registros de error / advertencia del agente de mosquitto que estaba cansado de configurar en el archivo de configuración de mosquitto.
Bence Kaulics

Respuestas:

8

Esto es lo que hago. Secuencia de comandos siguiente guardada como timestampLog.vbs:

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

Luego ejecuto esto desde la línea de comandos:

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

Donde como quiera cambiar la ruta a su carpeta mosquitto y cambiar la ruta "logfile.txt" a lo que desee.

Si esto es lo que está buscando, no lo sé, pero a alguien más podría gustarle la solución provista aquí. Para romper la línea de comando:

C:\Program Files\mosquitto> es la carpeta local para Mosquitto

mosquitto_sub es el archivo .exe usado para escuchar al corredor

-t +/#"-t" es dar el archivo .exe la información para escuchar t OPIC de + / # , que es todos los temas de los clientes. "#" significaría todos los temas, incluso los temas creados por el agente. \ $ SYS / # solo escuchará los temas de los corredores. Es posible tener múltiples -t (creo).

-v es dar al archivo .exe la información para generar los temas detallados, es decir, también generar el tema en sí (no solo su valor).

| es canalizar este primer comando al comando de script.

cscript //nologo timestampLog.vbses ejecutar cscript.exe con el script vbs que escribimos anteriormente. //nologole dice a la línea de comandos que envíe la información de salida de cscript.exe a un archivo externo en lugar de la línea de comandos en sí.

2> le dice a la línea de comandos que envíe "StdErr" (que es lo que le dijimos al script para que canalice todos los mensajes en el archivo .vbs).

C:\*USER*\Desktop\logfile.txtes la ruta y el nombre del archivo de salida. En lugar de .txt, podría considerar usar .log u otra cosa.

Jimmy Westberg
fuente
4

La respuesta a esta pregunta: ¿Cómo habilitar WebSockets en Mosquitto ejecutándose en Windows? En realidad respondió a esta pregunta también.

Al final resultó que el archivo de configuración de Mosquitto tiene que agregarse explícitamente en la línea de comando.

Cuando ejecuta mosquitto desde la línea de comandos, debe señalar explícitamente el archivo de configuración con la opción -c

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

Después de esto pude obtener información adicional sobre eventos de error de socket o tal.

1489438223: mosquitto versión 1.4.10 (fecha de construcción 24/08/2016 21: 03: 24.73) a partir

1489438223: Configuración cargada desde mosquitto.conf.

1489438223: Apertura del socket de escucha ipv6 en el puerto 1883.

1489438223: Error: normalmente solo se permite un uso de cada dirección de socket (protocolo / dirección de red / puerto).

1489438341: mosquitto versión 1.4.10 (fecha de construcción 24/08/2016 21: 03: 24.73) a partir

1489438341: Configuración cargada desde mosquitto.conf.

1489438341: Apertura del socket de escucha ipv6 en el puerto 1883.

1489438341: Apertura del socket de escucha ipv4 en el puerto 1883.

1489438363: Nueva conexión desde 192.168.1.4 en el puerto 1883.

1489438363: Nuevo cliente conectado desde 192.168.1.4 como root.1489438369381 (c1, k60, u'phone ').

1489438363: Envío de CONNACK a root.1489438369381 (0, 0)

1489438363: se recibió SUSCRIBIRSE desde root.1489438369381

1489438363: ambiente / humedad (QoS 1)

1489438363: root.1489438369381 1 habitación / humedad

1489438363: Envío> SUBACK a root.1489438369381

1489438453: el cliente root.1489438369381 ha excedido el tiempo de espera, desconectándose.

1489438453: Error de socket en el cliente root.1489438369381, desconectando.

Bence Kaulics
fuente
3
  1. carga útil de registro

    Si desea registrar la carga útil del mensaje PUBLICAR, aquí agrego un registro personalizado en mosquitto v1.5.3 souce:

    Fuente en Git Hub .

    // solo muestra la carga útil ASCII, los datos binarios pueden romper la terminal.

  2. uso en mosquitto.conf:

    carga útil de log_type

  3. resultado

    el registro se convierte en:

    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
fuente
1
¿Qué sucede cuando publica una carga binaria?
hardillb
oh, solo probado con carga útil ascii, binario tal vez rompió la terminal, olvidé decirlo
yurenchen
2

Encontré esto hace un tiempo pero no puedo atribuirlo al autor original. Funciona muy bien para los registros existentes, pero no puede 'colarse' con esta solución:

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

Usando esto en Linux, pero debería funcionar en WSL / cygwin.

jshep321
fuente
2
¿Por qué no puedes cambiar el catpor tail -f? y si no, entonces el gato es redundante y debería dejar que grep abra el archivo
hardillb