@david-knafo/mongoose-morgan-body-response

Used to log morgan stream data with request and response body into MongoDb database.

Usage no npm install needed!

<script type="module">
  import davidKnafoMongooseMorganBodyResponse from 'https://cdn.skypack.dev/@david-knafo/mongoose-morgan-body-response';
</script>

README

mongoose-morgan-body

dependencies Status devDependencies Status Known Vulnerabilities

NPM

Is an npm package which is combining mongoose and morgan packages by adding an additional functionality to log morgan data into MongoDB.

Install

To install this package just run:

npm install mongoose-morgan-body

Basic usage example

Here is an example of using mongoose-morgan-body together with the express app:

// express
var express = require('express');
var app = express();

// mongoose-morgan-body
var morgan = require('mongoose-morgan-body');

// connection-data
var port = process.env.port || 8080;

// Logger
app.use(morgan({
    connectionString: 'mongodb://localhost:27017/logs-db'
}));

// run
app.listen(port);
console.log('works... ' + port);

The example from the above will create inside logs-db database collection called logs and will store data inside it.

Detailed usage

mongoose-morgan-body is accepting three parameters:

  • mongoData : object type with next properties
    • required {string} connectionString
    • optional {string} collection
    • optional {string} user
    • optional {string} pass
    • optional {bool} capped (pull req by @Ni55aN)
    • optional {int} cappedSize (pull req by @Ni55aN)
    • optional {int} cappedMax (pull req by @Ni55aN)
    • optional {string} dbName (pull req by @pmstss)
    • optional {bool} useNewUrlParser (default: true)
    • optional {bool} useUnifiedTopology (default: true) (issue #8)
  • options : object type - standrad morgan options
  • format : string type - standrad mrogan format

Example without morgan options:

app.use(morgan({
    connectionString: 'mongodb://localhost:27017/logs-db'
   }, {}, 'short'
));

Full example:

app.use(morgan({
    collection: 'error_logger',
    connectionString: 'mongodb://localhost:27017/logs-db',
    user: 'admin',
    pass: 'test12345'
   },
   {
    skip: function (req, res) {
        return res.statusCode < 400;
    }
   },
    ':method :url :status :response-time ms - :res[content-length] :body - :req[content-length]'
));

If you want to store data in db in seperate fields,

format: ':method === :url === :status === :response-time ms === :res[content-length] === :body === :resBody === :req[content-length]'

Data will store in following format in DB:

        date: {
            type: Date,
            default: Date.now
        },
        log: String,
        endpoint: String,
        method: String,
        bodySize: String,
        responseCode: String,
        responseTime: String,
        requestBody: Object,
        responseBody: Object,

The code above will log only data in dev format and will skip all the logs if the response status code is less than 400. Data will be stored in logs-db database in error_logger collection.

Contribution

Feel free to contribute by forking this repository, making some changes, and submitting pull requests. For any questions or advice place an issue on this repository.

License

MIT