Log all API request to mongoDB using morgan and winston with node express Log all API request to mongoDB using morgan and winston with node express mongodb mongodb

Log all API request to mongoDB using morgan and winston with node express


I suggest using the package express-winston. See link for documentation.After install package, npm i express-winston, create middleware name logger.js (or whatever you please). copy the following code below

const expressWinston = require('express-winston');const requestLog = expressWinston.logger({  transports: [    new winston.transports.Console({      format: winston.format.json({        space: 2      })    }),    new winston.transports.MongoDB({      db: 'localhost:27001', //Your Db connection      options: {        useNewUrlParser: true,        poolSize: 2,        autoReconnect: true      }    })  ],  meta: true,  msg: "Request: HTTP {{req.method}} {{req.url}}; Username: {{req.user.preferred_username}}; ipAddress {{req.connection.remoteAddress}}",  requestWhitelist: [    "url",    "method",    "httpVersion",    "originalUrl",    "query",    "body"  ]});exports.requestLog = requestLog;

The in your app.js file, require the logger file so that is applied globally:

const logger = require('../middleware/logger');const express = require('express');const app = express();app.use(logger.requestLog);

There are additional options you can include like for example:expressWinston.responseWhitelist.push('body')

that will provide the response body in the object.

You can remove the transport for the console if you don't want to see all request, i only added it so you can see the object without going to the database each time.