-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathLogs.js
89 lines (85 loc) · 2.41 KB
/
Logs.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
const { AnsiColoredLog } = require("./AnsiColoredLog.js");
const { NowhereOutput } = require("./NowhereOutput.js");
const { Dictionary } = require("./Dictionary.js");
const { GoogleLog } = require("./GoogleLog.js");
const { BaseLog } = require("./BaseLog.js");
const { TextLog } = require("./TextLog.js");
const { JsonLog } = require("./JsonLog.js");
/**
* @class
* Представляет множество логов в некотором ресурсе вывода.
*
*/
class Logs {
/**
* @property {iOutput} #outputResource - Некоторый ресурс вывода логов
*/
#outputResource;
/**
* @property {Dictionary} #initOutputs - Словарь с ключами - названиями среды исполнения и значениями списками применяемых декораторов к логам и со списком по умолчанию.
*/
#initOutputs = (new Dictionary)
.withEntry(
'dev',
[ TextLog, AnsiColoredLog ]
)
.withDefaultVal(
[ JsonLog, GoogleLog ]
);
/**
* @property {Array<BaseLog>}
*/
#usedOutputs = [];
/**
* @param {AbstractOutput} outputResource
* @param {String} environment
*/
constructor(outputResource = new NowhereOutput, environment = 'dev') {
this.#outputResource = outputResource;
this.#usedOutputs = this.#initOutputs.valByKeyOrDefault(environment);
}
/**
* @param {Object} jsObj
*/
#add(jsObj) {
let currLog = BaseLog.newFromJsObj(jsObj);
this.#usedOutputs.forEach(nextLog => {
currLog = nextLog.newFromLog(currLog);
});
this.#outputResource.add( currLog.level(), currLog.asString() );
}
/**
* @param {Object} jsObj
*/
add(jsObj) {
this.#add(jsObj);
}
/**
* @param {Object} jsObj
* @param {String} level
*/
#addWithLevel(jsObj, level) {
this.#add(
Object.assign({ level: level }, jsObj)
);
}
/**
* @param {Object} jsObj
*/
addInfo(jsObj) {
this.#addWithLevel(jsObj, 'info');
}
/**
* @param {Object} jsObj
*/
addErr(jsObj) {
this.#addWithLevel(jsObj, 'error');
}
/**
* @param {Object} jsObj
*/
addWarn(jsObj) {
this.#addWithLevel(jsObj, 'warn');
}
}
module.exports = {Logs};