-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.js
46 lines (38 loc) · 997 Bytes
/
index.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
'use strict';
var bunyan = require('bunyan');
var bunyanMethods = Object.keys(bunyan.prototype).filter(function (k) {
return typeof bunyan.prototype[k] === 'function';
});
var bunyanTree = function (options) {
var that = {};
var branches = [];
var trunk;
that.seed = function (opts) {
trunk = opts instanceof bunyan ? opts.child(options) : bunyan.createLogger(opts);
bunyanMethods.forEach(function (m) {
that[m] = trunk[m].bind(trunk);
});
branches.forEach(function (branch) {
branch.seed(trunk);
});
return that;
};
that.fork = function (options) {
var branch = bunyanTree(options);
if (trunk) { branch.seed(trunk); }
branches.push(branch);
return branch;
};
that.tree = {};
bunyanMethods.forEach(function (m) {
that.tree[m] = function () {
var args = arguments;
branches.forEach(function (branch) {
branch.tree[m].apply(branch, args);
});
return trunk[m].apply(trunk, args);
};
});
return that;
};
module.exports = bunyanTree();