| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114 |
- /**
- * container.js: Inversion of control container for winston logger instances.
- *
- * (C) 2010 Charlie Robbins
- * MIT LICENCE
- */
- 'use strict';
- const createLogger = require('./create-logger');
- /**
- * Inversion of control container for winston logger instances.
- * @type {Container}
- */
- module.exports = class Container {
- /**
- * Constructor function for the Container object responsible for managing a
- * set of `winston.Logger` instances based on string ids.
- * @param {!Object} [options={}] - Default pass-thru options for Loggers.
- */
- constructor(options = {}) {
- this.loggers = new Map();
- this.options = options;
- }
- /**
- * Retreives a `winston.Logger` instance for the specified `id`. If an
- * instance does not exist, one is created.
- * @param {!string} id - The id of the Logger to get.
- * @param {?Object} [options] - Options for the Logger instance.
- * @returns {Logger} - A configured Logger instance with a specified id.
- */
- add(id, options) {
- if (!this.loggers.has(id)) {
- // Remark: Simple shallow clone for configuration options in case we pass
- // in instantiated protoypal objects
- options = Object.assign({}, options || this.options);
- const existing = options.transports || this.options.transports;
- // Remark: Make sure if we have an array of transports we slice it to
- // make copies of those references.
- options.transports = existing ? existing.slice() : [];
- const logger = createLogger(options);
- logger.on('close', () => this._delete(id));
- this.loggers.set(id, logger);
- }
- return this.loggers.get(id);
- }
- /**
- * Retreives a `winston.Logger` instance for the specified `id`. If
- * an instance does not exist, one is created.
- * @param {!string} id - The id of the Logger to get.
- * @param {?Object} [options] - Options for the Logger instance.
- * @returns {Logger} - A configured Logger instance with a specified id.
- */
- get(id, options) {
- return this.add(id, options);
- }
- /**
- * Check if the container has a logger with the id.
- * @param {?string} id - The id of the Logger instance to find.
- * @returns {boolean} - Boolean value indicating if this instance has a
- * logger with the specified `id`.
- */
- has(id) {
- return !!this.loggers.has(id);
- }
- /**
- * Closes a `Logger` instance with the specified `id` if it exists.
- * If no `id` is supplied then all Loggers are closed.
- * @param {?string} id - The id of the Logger instance to close.
- * @returns {undefined}
- */
- close(id) {
- if (id) {
- return this._removeLogger(id);
- }
- this.loggers.forEach((val, key) => this._removeLogger(key));
- }
- /**
- * Remove a logger based on the id.
- * @param {!string} id - The id of the logger to remove.
- * @returns {undefined}
- * @private
- */
- _removeLogger(id) {
- if (!this.loggers.has(id)) {
- return;
- }
- const logger = this.loggers.get(id);
- logger.close();
- this._delete(id);
- }
- /**
- * Deletes a `Logger` instance with the specified `id`.
- * @param {!string} id - The id of the Logger instance to delete from
- * container.
- * @returns {undefined}
- * @private
- */
- _delete(id) {
- this.loggers.delete(id);
- }
- };
|