UNPKG

mongoose-execution-time

Version:

Mongoose plugin for measuring and logging query execution time

130 lines (88 loc) 3.29 kB
# Mongoose execution time Mongoose plugin for measuring and logging query execution time. ```bash npm i mongoose-execution-time ``` Output example: ```sh Query: find in customers completed in: 7 ms { filter: {} } Query: find in blogposts completed in: 4 ms { filter: { title: 'Post 1' }, additionalLogProperties: { bruh: 1 } } Query: findOne in blogposts completed in: 4 ms { filter: {} } Query: estimatedDocumentCount in blogposts completed in: 3 ms { filter: {} } Query: aggregate in blogposts completed in: 1 ms { aggregatePipeline: '[{"$match":{"title":"Post 1"}}]' } Query: aggregate in blogposts completed in: 1 ms { aggregatePipeline: '[{"$match":{"title":"Post 1"}},{"$project":{"title":1}}]' } ``` ## How to use ```js const mongoose = require('mongoose'); const { logExecutionTime } = require('mongoose-execution-time'); mongoose.plugin(logExecutionTime); ``` ## Configuration The plugin can be easily adjusted via the following configuration options. ```ts interface LogExecutionTimeConfig { logger?: any; loggerLevel?: string; loggerVerbosity?: LoggerVerbosity; loggerFunction?: LoggerFunction; } ``` | Option | Description | Default | |---|---|---| | logger | logger provider | console | | loggerLevel | logger level used by the logger above | debug | | loggerVerbosity | controls how much information gets logged | High | | loggerFunction | for full control over how the log gets written | N/A | Code example: ```js const mongoose = require('mongoose'); const { logExecutionTime } = require('mongoose-execution-time'); mongoose.plugin(logExecutionTime, { loggerLevel: 'info' }); ``` ## Do not want filter/aggregatePipeline information logged? Simply set the `loggerVerbosity` to `LoggerVerbosity.Normal` in the plugin configuration. ```js const mongoose = require('mongoose'); const { logExecutionTime, LoggerVerbosity } = require('mongoose-execution-time'); mongoose.plugin(logExecutionTime, { loggerVerbosity: LoggerVerbosity.Normal, loggerLevel: 'info' }); ``` ## Logging additional information The plugin exposes a method for logging additional information in the same log line as the execution time. Code example: ```ts await BlogPostModel.find({ title: 'Title' }).additionalLogProperties({ message: 'My custom message'}); ``` Output example: ``` Query: find in blogposts completed in: 8 ms { additionalLogProperties: { message: 'My custom message' } } ``` ## Log message configuration If the default logger formatting or style doesn't fit your needs, it can be adjusted by providing a custom logger function. Code example: ```ts const mongoose = require('mongoose'); const { logExecutionTime } = require('mongoose-execution-time'); mongoose.plugin(logExecutionTime, { loggerFunction: (operation, collectionName, executionTimeMS, filter, update, additionalLogProperties, aggregationPipeline) => { console.log(`My custom logger function | ${operation} | ${collectionName} | ${executionTimeMS}`, { filter, update, additionalLogProperties, aggregationPipeline }) } }); ``` Output example: ``` My custom logger function | find | blogposts | 4 { filter: { title: 'Post 1' }, update: undefined, additionalLogProperties: { bruh: 1 } aggregationPipeline: null } ```