forked from winstonjs/winston
-
Notifications
You must be signed in to change notification settings - Fork 0
/
container.js
94 lines (80 loc) · 2.39 KB
/
container.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
/*
* container.js: Inversion of control container for winston logger instances
*
* (C) 2010 Charlie Robbins
* MIT LICENCE
*
*/
var common = require('./common'),
winston = require('../winston');
//
// ### function Container (options)
// #### @options {Object} Default pass-thru options for Loggers
// Constructor function for the Container object responsible for managing
// a set of `winston.Logger` instances based on string ids.
//
var Container = exports.Container = function (options) {
this.loggers = {};
this.options = options || {};
this.default = {
tranports: [
new winston.transports.Console({
level: 'silly',
colorize: false
})
]
}
};
//
// ### function get / add (id, options)
// #### @id {string} Id of the Logger to get
// #### @options {Object} **Optional** Options for the Logger instance
// Retreives a `winston.Logger` instance for the specified `id`. If
// an instance does not exist, one is created.
//
Container.prototype.get = Container.prototype.add = function (id, options) {
if (!this.loggers[id]) {
options = common.clone(options || this.options || this.default);
options.transports = options.transports || [];
Object.keys(options).forEach(function (key) {
if (key === 'transports') {
return;
}
name = common.capitalize(key);
if (!winston.transports[name]) {
throw new Error('Cannot add unknown transport: ' + name);
}
options.transports.push(new (winston.transports[name])(options[key]));
});
this.loggers[id] = new winston.Logger(options);
}
return this.loggers[id];
};
//
// ### function close (id)
// #### @id {string} **Optional** Id of the Logger instance to find
// Returns a boolean value indicating if this instance
// has a logger with the specified `id`.
//
Container.prototype.has = function (id) {
return !!this.loggers[id];
};
//
// ### function close (id)
// #### @id {string} **Optional** Id of the Logger instance to close
// Closes a `Logger` instance with the specified `id` if it exists.
// If no `id` is supplied then all Loggers are closed.
//
Container.prototype.close = function (id) {
var self = this;
function _close (id) {
if (!self.loggers[id]) {
return;
}
self.loggers[id].close();
delete self.loggers[id];
}
return id ? _close(id) : Object.keys(this.loggers).forEach(function (id) {
_close(id);
});
};