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

时间:2019-03-27 03:06:52

标签: node.js morgan

是否有限制或规则,您必须如何设置/定义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))
}))

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

2 个答案:

答案 0 :(得分:1)

我相信您在调用morgan函数时出错。

根据docs

  

morgan(format, options)

     

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

     

format函数将使用三个参数令牌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))
}))

第二个参数(函数)没有执行您想要的操作,因为morgan认为它是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);

答案 1 :(得分: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))
}))