Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Nodejs - How to use morgan with debug

Morgan outputs requests directly to the console.

How can I redirect them to npm debug so that it follows the same format as the other stuff which is being logged?

My debug.js config looks like the following:

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,
};

And I currently log other stuff like:

import { info } from './debug';

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

My current morgan call is:

app.use(morgan('combined'));
like image 462
zurfyx Avatar asked Dec 13 '25 21:12

zurfyx


2 Answers

Morgan accepts an optional parameter which is the stream.

By default it points to process.stdout, the console.

Since what it does it to call stream.write, you can easily build a quick stream which redirects to your debug.

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

Generically (but still ES6), that would be:

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); } }}));
like image 110
zurfyx Avatar answered Dec 16 '25 22:12

zurfyx


when using morgan ˋstreamˋ combined with ˋdebugˋ, it´s best to do:

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

The reason: morgan add a new line at the end of the msg when calling the stream.write(...) function.

like image 28
DevelDevil Avatar answered Dec 16 '25 21:12

DevelDevil



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!