Nodejs - 如何使用morgan进行调试

时间:2017-02-02 18:27:46

标签: node.js express logging morgan npm-debug

Morgan直接向控制台输出请求。

如何将它们重定向到npm debug,以便它采用与正在记录的其他内容相同的格式?

我的debug.js配置如下所示:

import debug from 'debug';

const LOG_PREFIX = 'api';

const info = debug(`${LOG_PREFIX}:info`);
const dev = debug(`${LOG_PREFIX}:dev`);
const error = debug(`${LOG_PREFIX}:error`);

export {
  info,
  dev,
  error,
};

我目前正在记录其他内容:

import { info } from './debug';

info('App is up and running!');

我目前的摩根电话是:

app.use(morgan('combined'));

2 个答案:

答案 0 :(得分:3)

Morgan接受一个可选参数stream

默认情况下,它指向控制台process.stdout

由于它可以调用stream.write,因此您可以轻松构建一个快速流,重定向到您的debug

app.use(morgan('combined', { stream: { write: msg => info(msg) } }));

通常(但仍 ES6 ),即:

import debug from 'debug';
const info = debug('info');
app.use(morgan('combined', { stream: { write: msg => info(msg) } }));

<强> ES5

var info = require('debug')('info');
app.use(morgan('combined', { stream: { write: function(msg) { info(msg); } }}));

答案 1 :(得分:1)

结合使用摩根ˋstreamˋ和ˋdebugˋ时,最好这样做:

app.use(morgan('combined', { stream: { write: msg => info(msg.trimEnd()) } }));

原因:当调用stream.write(...)函数时,摩根在味精的末尾添加新行。