Nodejs - Как использовать Морган с отладкой

Морган выводит запросы прямо на консоль.

Как я могу перенаправить их в отладочную версию npm, чтобы она соответствовала формату, который используется в других журналах?

мой 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'));

1 ответ

Решение

Морган принимает необязательный параметр, который является потоком.

По умолчанию это указывает на 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); } }}));

При использовании morgan "stream" в сочетании с "debug" лучше всего сделать:

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

Причина: Морган добавляет новую строку в конце сообщения при вызове stream.write(...) функция.

Другие вопросы по тегам