Morgan 不在控制台打印输出中使用颜色

Morgan does not use colors in console printout

是否有限制或规定您必须如何设置/定义 morgan 以便它仍然遵循设置的颜色模式?我目前有以下摩根设置。

morgan.token('date', (req, res, tz) => {
  return moment().tz(tz).format();
})

morgan.format('myformat', '[:date[America/Los_Angeles]][:remote-addr] ":method :url" :status :res[content-length] - :response-time ms')

app.use(morgan('myformat', function (tokens, req, res) {
  return chalk.blue(tokens.method(req, res))
    + ' ' + chalk.green(tokens.url(req, res))
    + ' ' + chalk.red(tokens['response-time'](req, res))
}))

当我使用

app.use(morgan( function (tokens, req, res) {
  return chalk.blue(tokens.method(req, res))
    + ' ' + chalk.green(tokens.url(req, res))
    + ' ' + chalk.red(tokens['response-time'](req, res))
}))

它使用我设置的颜色,但当我使用自定义格式时不使用

我相信你调用的 morgan 函数是错误的。

根据 docs:

morgan(format, options)

Create a new morgan logger middleware function using the given format and options. The format argument may be a string of a predefined name (see below for the names), a string of a format string, or a function that will produce a log entry.

The format function will be called with three arguments tokens, req, and res...

所以当你打电话时:

app.use(morgan('myformat', function (tokens, req, res) {
  return chalk.blue(tokens.method(req, res))
    + ' ' + chalk.green(tokens.url(req, res))
    + ' ' + chalk.red(tokens['response-time'](req, res))
}))

第二个参数(函数)没有按照您的要求执行,因为摩根认为这是 options 参数。我看到实现你想要的唯一方法是在你传递给 morgan 的函数中声明标记顺序和它们的颜色,就像它们在 example:

中显示的那样
const loggerMiddleware = morgan(function (tokens, req, res) {
    return [
        '[' + tokens['date'](req, res) + ']',
        '[' + tokens["remote-addr"](req, res) + ']',
        '"' + chalk.blue(tokens["method"](req, res)) + chalk.green(tokens["url"](req, res)) + '"',
       // add more tokens here...
    ].join(' ')
});

app.use(loggerMiddleware);

多亏了 OzW 指针,我才能够使用下面的代码并通过传递我之前使用的格式定义来使其工作。拥有所有想要的颜色,就像一个魅力。

app.use(morgan( function (tokens, req, res) {

  return chalk.yellow(moment().tz("America/Los_Angeles").format('ddd, DD MMM YYYY HH:mm:ss.SSS Z z'))
    + ' ' + chalk.blue(tokens['remote-addr'](req, res))
    + ' ' + chalk.cyanBright(tokens.method(req, res))
    + ' ' + chalk.green(tokens.url(req, res))
    + ' ' + chalk.magentaBright(tokens.status(req, res))
    + ' ' + chalk.red(tokens['response-time'](req, res))
}))