1 | let log = require('fancy-log');
|
2 | let c = require('chalk');
|
3 |
|
4 | enum LEVEL {
|
5 | INFO,
|
6 | DEBUG,
|
7 | ERROR,
|
8 | WARN
|
9 | }
|
10 |
|
11 | class Logger {
|
12 | public logger;
|
13 | public silent;
|
14 |
|
15 | constructor() {
|
16 | this.logger = log;
|
17 | this.silent = true;
|
18 | }
|
19 |
|
20 | public info(...args) {
|
21 | if (!this.silent) {
|
22 | return;
|
23 | }
|
24 | this.logger(this.format(LEVEL.INFO, ...args));
|
25 | }
|
26 |
|
27 | public error(...args) {
|
28 | this.logger(this.format(LEVEL.ERROR, ...args));
|
29 | }
|
30 |
|
31 | public warn(...args) {
|
32 | if (!this.silent) {
|
33 | return;
|
34 | }
|
35 | this.logger(this.format(LEVEL.WARN, ...args));
|
36 | }
|
37 |
|
38 | public debug(...args) {
|
39 | if (!this.silent) {
|
40 | return;
|
41 | }
|
42 | this.logger(this.format(LEVEL.DEBUG, ...args));
|
43 | }
|
44 |
|
45 | private format(level, ...args) {
|
46 | let pad = (s, l, z = '') => {
|
47 | return s + Array(Math.max(0, l - s.length + 1)).join(z);
|
48 | };
|
49 |
|
50 | let msg = args.join(' ');
|
51 | if (args.length > 1) {
|
52 | msg = `${pad(args.shift(), 15, ' ')}: ${args.join(' ')}`;
|
53 | }
|
54 |
|
55 | switch (level) {
|
56 | case LEVEL.INFO:
|
57 | msg = c.green(msg);
|
58 | break;
|
59 |
|
60 | case LEVEL.DEBUG:
|
61 | msg = c.cyan(msg);
|
62 | break;
|
63 |
|
64 | case LEVEL.WARN:
|
65 | msg = c.yellow(msg);
|
66 | break;
|
67 |
|
68 | case LEVEL.ERROR:
|
69 | msg = c.red(msg);
|
70 | break;
|
71 | }
|
72 |
|
73 | return [msg].join('');
|
74 | }
|
75 | }
|
76 |
|
77 | export let logger = new Logger();
|