-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathlog.mjs
90 lines (75 loc) · 2.22 KB
/
log.mjs
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
import { config } from "process";
const NAME_LEVELS = {
'fatal': 1,
'error': 2,
'warn': 3,
'info': 4,
'debug': 5,
'trace': 6,
};
const LEVEL_NAMES = Object.fromEntries(Object.entries(NAME_LEVELS).map(([k, v]) => [v, k]));
const DEFAULT_NAME = 'default';
const DEFAULT_LEVEL = NAME_LEVELS['info'];
const DEFAULT_CONFIG = { DEFAULT_NAME: DEFAULT_LEVEL };
function parseLevel(levelStr) {
if (typeof (levelStr) === 'number') {
return levelStr;
} else if (isNaN(levelStr)) {
const level = NAME_LEVELS[levelStr.toLowerCase()];
if (level) {
return level;
} else {
throw new Error(`Unrecognized level '${levelStr}' when parsing log config`);
}
} else {
return parseInt(levelStr);
}
}
function parseConfig(config) {
return Object.fromEntries(Object.entries(config)
.map(([k, v]) => [k, parseLevel(v)]));
}
export class Logger {
constructor(name) {
this.name = name;
}
static updateConfig(config) {
Logger.config = parseConfig(config);
}
fatal(...msg) {
Logger.log(this.name, 'fatal', ...msg);
}
error(...msg) {
Logger.log(this.name, 'error', ...msg);
}
warn(...msg) {
Logger.log(this.name, 'warn', ...msg);
}
info(...msg) {
Logger.log(this.name, 'info', ...msg);
}
debug(...msg) {
Logger.log(this.name, 'debug', ...msg);
}
trace(...msg) {
Logger.log(this.name, 'trace', ...msg);
}
static getConfiguredLevel(name) {
return Logger.config[name] || Logger.config[DEFAULT_NAME] || DEFAULT_LEVEL;
}
static log(name, levelStr, ...msg) {
const level = parseLevel(levelStr);
const configLevel = Logger.getConfiguredLevel(name);
if (level <= configLevel) {
console.log(`-> ${name.toUpperCase().padEnd(15)} [${LEVEL_NAMES[level].toUpperCase().padEnd(5)}]`, ...msg);
}
}
static dynLog(name, levelStr, msgFunc) {
const level = parseLevel(levelStr);
const configLevel = Logger.getConfiguredLevel(name);
if (level <= configLevel) {
Logger.log(name, level, msgFunc());
}
}
}
Logger.updateConfig(DEFAULT_CONFIG);