1

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

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

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

4

2 回答 2

1

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

根据文档

morgan(format, options)

使用给定的格式和选项创建一个新的 morgan logger 中间件函数。格式参数可以是预定义名称的字符串(名称见下文)、格式字符串的字符串或将生成日志条目的函数。

将使用三个参数标记调用格式函数,req 和 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就像它们在示例中显示的那样

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);
于 2019-03-28T15:32:46.150 回答
0

感谢 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))
}))
于 2019-04-10T05:50:26.620 回答