1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 |
|
9 |
|
10 |
|
11 |
|
12 |
|
13 |
|
14 |
|
15 |
|
16 | require('colors');
|
17 |
|
18 | var LEVEL_COLORS = [
|
19 | ['red', 'bold'], 'yellow', 'green', null
|
20 | ];
|
21 |
|
22 |
|
23 | var ConsoleLogger = function (output) {
|
24 | this.output = output || process.stdout;
|
25 | };
|
26 |
|
27 | var buildId = function (loggersChain) {
|
28 | var somethingBefore = false;
|
29 | var leftParen = '[';
|
30 | var res = [leftParen];
|
31 | for (var i = 0, l = loggersChain.length; i < l; i++) {
|
32 | var curLogger = loggersChain[i];
|
33 | if (somethingBefore && (curLogger.name || curLogger.instanceId)) {
|
34 | res.push('.');
|
35 | }
|
36 | if (curLogger.name) {
|
37 | res.push(curLogger.name);
|
38 | somethingBefore = true;
|
39 | }
|
40 | if (curLogger.instanceId) {
|
41 | res.push('(');
|
42 | res.push(curLogger.instanceId);
|
43 | res.push(')');
|
44 | somethingBefore = true;
|
45 | }
|
46 | }
|
47 | res.push('] ');
|
48 | return res.join('');
|
49 | };
|
50 |
|
51 | ConsoleLogger.prototype.onLog = function (evt) {
|
52 | var color = LEVEL_COLORS[evt.level - 1];
|
53 | var message = evt.message;
|
54 | if (color) {
|
55 | if (Array.isArray(color)) {
|
56 | for (var i = 0, len = color.length; i < len; i++) {
|
57 | message = message[color[i]];
|
58 | }
|
59 | } else {
|
60 | message = message[color];
|
61 | }
|
62 | }
|
63 | var id = buildId(evt.loggersChain).grey;
|
64 | this.output.write(id + message + '\n');
|
65 | };
|
66 |
|
67 | ConsoleLogger.prototype.attach = function (logger) {
|
68 | logger.on('log', this.onLog.bind(this));
|
69 | };
|
70 |
|
71 | module.exports = ConsoleLogger;
|