5

I am using morgan-body to log HTTP requests and responses in my node.js/express application. Log entries created by this middleware consist of the full request and response HTTP headers, which is too verbose for my needs.

This is my morgan-body snippet:

const express = require('express');
const app = express();
const parser = require('body-parser');
const morganBody = require('morgan-body');

// snipped configuration for other middleware
app.use(parser.json());
app.use(parser.urlencoded({ extended: false }));

morganBody(app, {
  noColors: true,
  maxBodyLength: 65535,
  stream: this.responseStream
});

As the existing log entry is too verbose I need to create a custom format for them, i.e.,

timestamp: fruit-name: info: status: Pass message: no damage

The fields "status" and "message" are in the response.body.

I've googled for a solution to this but I'm stuck. Is there a way for morgan-body to compose a custom message? If there is an alternative middleware that can achieve what I needed it would be welcome.

Victor Ian
  • 1,034
  • 13
  • 26
  • 1
    Instead of `morgon-body` you can use `morgan` that will work for you, `morgan` have lot of different log formats – Aabid Jun 07 '18 at 10:37

1 Answers1

13

Instead of using morgan-body, this can be easily achieved using morgan library.

You can do it by creating custom tokes.

Here is a possible solution:

const express = require('express');
const app = express();
const morgan = require('morgan');

morgan.token('status', function (req, res) { return res.body.status })
morgan.token('message', function (req, res) { return res.body.message })
morgan.token('fruit-name', function (req, res) { return res.body.fruit-name })
morgan.token('timestamp', function (req, res) { return res.body.timestamp })


app.use(morgan('Timestamp\: :timestamp fruit-name\: :fruit-name Status\: :status Message\: :message'))

This should create a custom string for you log!

Shaurya Mittal
  • 764
  • 1
  • 8
  • 19