Nodejs - 如何在调试中使用摩根

zur*_*fyx 3 logging node.js express 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,
};
Run Code Online (Sandbox Code Playgroud)

我目前记录其他内容,例如:

import { info } from './debug';

info('App is up and running!');
Run Code Online (Sandbox Code Playgroud)

我目前的摩根电话是:

app.use(morgan('combined'));
Run Code Online (Sandbox Code Playgroud)

zur*_*fyx 5

Morgan 接受一个可选参数,即

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

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

app.use(morgan('combined', { stream: { write: msg => info(msg) } }));
Run Code Online (Sandbox Code Playgroud)

一般来说(但仍然是ES6),这将是:

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

ES5

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


小智 5

当 morgan \xcb\x8bstream\xcb\x8b 与 \xcb\x8bdebug\xcb\x8b 结合使用时,\xc2\xb4s 最好这样做:

\n\n
app.use(morgan('combined', { stream: { write: msg => info(msg.trimEnd()) } }));\n
Run Code Online (Sandbox Code Playgroud)\n\n

原因是:morgan在调用该函数时在msg末尾添加了一个新行stream.write(...)

\n