/winston-mongodb

A MongoDB transport for winston

Primary LanguageJavaScript

winston-mongodb

A MongoDB transport for winston.

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.

Motivation

tldr;?: To break the winston codebase into small modules that work together.

The winston 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.

Usage

const winston = require('winston');
// Requiring `winston-mongodb` will expose winston.transports.MongoDB`
require('winston-mongodb');

const 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.
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 {poolSize: 2, autoReconnect: true, useNewUrlParser: true}).
collection The name of the collection you want to store log messages in.
Defaults to log.
level Level of messages that this transport should log.
Defaults to info.
silent Boolean flag indicating whether to suppress output.
Defaults to false.
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 label field, if detected in meta-data.
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 false.
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 metadata 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.

Querying and streaming logs

Besides supporting the main options from winston, this transport supports the following extra options:

  • includeIds: Whether the returned logs should include the _id attribute settled by mongodb, defaults to false.

Installation

  $ npm install winston
  $ npm install winston-mongodb