如何获取有关rabbitmq连接操作的详细日志/信息?

app*_*orc 4 rabbitmq

我有一个连接到rabbitmq服务器的python程序.该程序启动时,连接良好.但是当rabbitmq服务器重新启动时,我的程序无法重新连接到它,并且只是"Socket closed"(由kombu生成)留下错误,这是没有意义的.

我想知道有关连接失败的详细信息.在服务器端,在rabbitmq日志文件中没有任何用处,它只是说"连接失败"而没有给出任何理由.

我尝试了跟踪插件(https://www.rabbitmq.com/firehose.html),发现当连接失败时,没有向amq.rabbitmq.trace交换发​​布跟踪信息.我启用了插件:

rabbitmq-plugins enable rabbitmq_tracing
systemctl restart rabbitmq-server
rabbitmqctl trace_on
Run Code Online (Sandbox Code Playgroud)

然后我写了一个客户端来从amq.rabbitmq.trace交换获取消息:

#!/bin/env python
from kombu.connection import BrokerConnection
from kombu.messaging import Exchange, Queue, Consumer, Producer

def on_message(self, body, message):
    print("RECEIVED MESSAGE: %r" % (body, ))
    message.ack()

def main():
    conn = BrokerConnection('amqp://admin:pass@localhost:5672//')
    channel = conn.channel()
    queue = Queue('debug', channel=channel,durable=False)
    queue.bind_to(exchange='amq.rabbitmq.trace', routing_key='publish.amq.rabbitmq.trace')
    consumer = Consumer(channel, queue)
    consumer.register_callback(on_message)
    consumer.consume()
    while True:
        conn.drain_events()

if __name__ == '__main__':
    main()
Run Code Online (Sandbox Code Playgroud)

我还尝试从rabbitmq服务器获取一些调试日志.我根据https://www.rabbitmq.com/configure.html重新配置了rabbitmq.config ,并将log_levels设置为

{log_levels, [{connection, info}]}
Run Code Online (Sandbox Code Playgroud)

但结果是rabbitmq服务器无法启动.好像官方文档不适合我,我的rabbitmq服务器版本是3.3.5.然而

{log_levels, [connection,debug,info,error]}
Run Code Online (Sandbox Code Playgroud)

要么

{log_levels, [connection,debug]}
Run Code Online (Sandbox Code Playgroud)

工作,但有了这个,日志中没有显示DEBUG信息,我不知道是否因为log_levels配置无效或者没有始终打印DEBUG日志.

小智 5

我知道这个答案来得非常晚,但对于未来的供应商来说,这对我有用:

[
  {rabbit,
    [
      {log_levels, [{connection, debug}, {channel, debug}]}
    ]
  }
].
Run Code Online (Sandbox Code Playgroud)

基本上,您只需要在它们所属的模块/插件中包装您想要设置的参数.