调试库不能与 amqplib (rabbitmq) 一起使用

问题描述

我们以两种“模式”运行我们的应用:

  1. 我们的 REST API(express js)
  2. 我们的后台处理器 (amqplib)

我们开始使用 nodemon 的 REST API 在 debug 上运行完全正常,但是我们的后台处理器在调试时无法正常工作。

我们在 .env 文件中声明了 DEBUG=app:*,是的,我们在控制台日志时确实看到了它,但由于某种原因,当我们执行以下操作时,在运行后台处理器时没有任何报告。

我们确实看到 amqp 的一个依赖项 bitsyntax 使用了调试。我想知道它是否可以关闭调试但在他们的代码中找不到任何可以做到这一点的东西。

我可以做些什么来解决这个问题?

import amqp from 'amqplib/callback_api'
import dotenv from 'dotenv'
import debug from 'debug'

const testLog = debug('app:worker')

const rabbitmq = `amqp://${process.env.RABBITMQ_USER}:${process.env.RABBITMQ_PASS}@${process.env.RABBITMQ_HOST}`
console.log(process.env.DEBUG) // app:*
const worker = () => {
  try {
    amqp.connect(rabbitmq,(err,conn) => {
      // ...
      testLog('this does not show up')
      console.log('this does show up')
      // ...
    })
  } catch (err) {
    // ...
  }
}

worker()

我们使用以下命令运行后台处理器: NODE_ENV=development nodemon ./src/workers/index.ts

解决方法

根据以下 github issue 响应, 在工作人员上需要启用以下代码:

debug.enable(process.env.DEBUG)