-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
选项。应如何正确完成?
#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
评论
log_type debug或log_type是否都给您更多信息?@ Aurora0001不管我在配置文件中设置了什么,都不会得到日志记录输出。只有-v选项在控制台(cmd)上提供了一些日志条目,但是使用了默认配置。
@JimmyWestberg虽然您的答案提供了一种方便的日志记录机制,但它只记录与主题相关的信息,而我本来对mosquitto代理的错误/警告日志感兴趣,而我讨厌在mosquitto配置文件中对其进行配置。