我有一个先前的问题,为了更接近解决方案,我想在Windows 7上启用Mosquitto代理日志记录。

-v表示详细的控制台日志记录。但这并不能提供足够的信息,仅在出现问题的情况下提供以下内容:

mosquitto -p 1883 -v



我尝试执行此答案中所述的操作。这是配置文件的日志记录部分:

 # 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
 


在这种情况下,我已经启动了代理如下所示:

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


-v选项将使用默认配置覆盖配置文件,因此我将其省略。但是我在控制台上看不到日志。


我尝试登录文件而不是stdout,并按如下所示更改配置:

mosquitto -p 1883


我已经手动创建了文件,并以相同的方式启动了代理,但无济于事。


如果我不使用该文件,则不会收到任何日志消息-v选项。
应如何正确完成?

评论

log_type debug或log_type是否都给您更多信息?

@ Aurora0001不管我在配置文件中设置了什么,都不会得到日志记录输出。只有-v选项在控制台(cmd)上提供了一些日志条目,但是使用了默认配置。

@JimmyWestberg虽然您的答案提供了一种方便的日志记录机制,但它只记录与主题相关的信息,而我本来对mosquitto代理的错误/警告日志感兴趣,而我讨厌在mosquitto配置文件中对其进行配置。

#1 楼

这就是我的工作。以下脚本另存为timestampLog.vbs:

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

然后我从命令行运行此脚本:您可能想在哪里更改mosquitto文件夹的路径,并将“ logfile.txt”路径更改为所需的任何内容。可能喜欢这里提供的解决方案。分解命令行:

C:\Program Files\mosquitto>是Mosquitto的本地文件夹

mosquitto_sub是用于侦听代理的.exe文件

-t +/#“ -t”是为.exe文件提供信息,以监听+ /#的主题,该主题是来自客户端的所有主题。 “#”表示所有主题,甚至是代理创建的主题。 \ $ SYS /#将仅侦听代理主题。可能有多个-t(我认为)。

-v是为.exe文件提供信息以输出详细主题,即也输出主题本身(不仅是其值)。

|将把第一个命令传递到脚本命令中。 cscript //nologo timestampLog.vbs告诉命令行提示符将cscript.exe输出信息输出到外部文件,而不是提示符本身。

//nologo告诉命令行提示符输出“ StdErr”(这就是我们告诉脚本将所有消息都集中到.vbs文件中。)

2>是输出的路径和文件名。您可以考虑使用.log或其他名称代替.txt。

#2 楼

这个问题的答案:如何在Windows上运行的Mosquitto上启用WebSockets?实际上也回答了这个问题。
事实证明,必须在命令行中显式添加Mosquitto的配置文件。

从命令行运行mosquitto时,您必须显式
-c选项指向配置文件
mosquitto -v -c /path/to/mosquitto.conf


之后,我就可以获得有关套接字错误事件或类似事件的其他信息。 1489438223:mosquitto版本1.4.10(构建日期2016年8月24日
21:03:24.73)开始
1489438223:从mosquitto.conf中加载配置。端口1883。
1489438223:错误:通常只允许每个套接字地址(协议/网络
地址/端口)使用一种。
1489438341:从mosquitto.conf中加载配置。
1489438363:新的连接n从端口1883上的192.168.1.4开始。 0,0)
1489438363:从root收到SUBSCRIBE.1489438369381
1489438363:房间/湿度(QoS 1)
1489438363:root.1489438369381 1房间/湿度
1489438363:发送> SUBACK到root.1489438369381
1489438453:客户端root.1489438369381已超过超时,断开连接。


#3 楼



日志有效负载

如果要记录发布消息的有效负载,
在这里我在mosquitto v1.5.3中添加了自定义日志源:

来源:Git Hub。

//仅显示ASCII有效负载,二进制数据可能会损坏终端。 :

日志类型有效载荷


结果

日志变为:

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))




评论


发布二进制有效负载时会发生什么?

– hardillb
18-11-15在22:51



哦,仅使用ascii有效负载进行测试,二进制文件可能会损坏终端,忘了说

– yurenchen
18年11月16日14:50



#4 楼

我前一段时间发现了这一点,但无法将其归因于原始作者。

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

可以在现有的日志上很好地工作,但不能在此解决方案中“ tail -f”: br />

评论


为什么不能将猫换成尾巴-f?如果不是这样的话,那只猫就是多余的,你应该让grep打开文件

– hardillb
20年1月6日在18:15