A MongoDB transport for winston
npm install winston-mongodbA MongoDB transport for [winston][0].
Current version supports only mongodb driver version 3.x and newer and winston 3.x and newer.
If you want to use winston-mongodb with mongodb version 1.4.x use winston-mongodb <1.x.
For mongodb 2.x use winston-mongodb <3.x.
tldr;?: To break the [winston][0] codebase into small modules that workThe [winston][0] codebase has been growing significantly with contributions and
other logging transports. This is awesome. However, taking a ton of
additional dependencies just to do something simple like logging to the Console
and a File is overkill.
js
const winston = require('winston');
// Requiring winston-mongodb will expose winston.transports.MongoDBconst log = winston.createLogger({
level: 'info',
transports: [
// write errors to console too
new winston.transports.Console({format: winston.format.simple(), level:'error'})
],
});
// logging to console so far
log.info('Connecting to database...');
const MongoClient = require('mongodb').MongoClient;
const url = "mongodb://localhost:27017/mydb";
const client = new MongoClient(url);
await client.connect();
const transportOptions = {
db: await Promise.resolve(client),
collection: 'log'
};
log.add(new winston.transports.MongoDB(transportOptions));
// following entry should appear in log collection and will contain
// metadata JSON-property containing url field
log.info('Connected to database.',{url});
``
The MongoDB transport takes the following options. Only option db is required:
| Option | Description |
| ------ | :----------------------------------------------- |
| db | REQUIRED. MongoDB connection uri, pre-connected MongoClient object or promise which resolves to a pre-connected MongoClient object. |{maxPoolSize: 2}
| dbName | The database name to connect to, defaults to DB name based on connection URI if not provided, ignored if using a pre-connected connection. |
| options| MongoDB connection parameters.
Defaults to ). |log
| collection | The name of the collection you want to store log messages in.
Defaults to . |info
| level | Level of messages that this transport should log.
Defaults to . |false
| silent | Boolean flag indicating whether to suppress output.
Defaults to . |label
| storeHost | Boolean indicating if you want to store machine hostname in logs entry, if set to true it populates MongoDB entry with 'hostname' field, which stores os.hostname() value. |
| label | If set to true, then label attribute content will be stored in field, if detected in meta-data. |false
| name | Transport instance identifier. Useful if you need to create multiple MongoDB transports. |
| capped | In case this property is true, winston-mongodb will try to create new log collection as capped.
Defaults to . |false
| cappedSize | Size of logs capped collection in bytes.
Defaults to 10,000,000. |
| cappedMax | Size of logs capped collection in number of documents. |
| tryReconnect | Will try to reconnect to the database in case of fail during initialization. Works only if __db__ is a string.
Defaults to . |false
| decolorize | Will remove color attributes from the log entry message.
Defaults to . |metadata
| leaveConnectionOpen| Will leave MongoClient connected after transport shuts down. |
| metaKey | Configure name of the field which is used to store metadata in the logged info object.
Defaults to to remain compatible with the metadata format |
| expireAfterSeconds |Seconds before the entry is removed. Works only if __capped__ is not set. |
Logging unhandled exceptions: For logging unhandled exceptions specify
winston-mongodb as handleExceptions logger according to winston documentation.
Besides supporting the main options from winston, this transport supports the
following extra options:
* __includeIds:__ Whether the returned logs should include the _id attributefalse
settled by mongodb, defaults to .
` bash``
$ npm install winston
$ npm install winston-mongodb
#### Author: Charlie Robbins
#### Contributors: Yurij Mikhalevich, Kendrick Taylor, Yosef Dinerstein, Steve Dalby
[0]: https://github.com/winstonjs/winston