1 | let c = require('ansi-colors');
|
2 | let pkg = require('../../package.json');
|
3 | const fancyLog = require('fancy-log');
|
4 |
|
5 | enum LEVEL {
|
6 | INFO,
|
7 | WARN,
|
8 | DEBUG,
|
9 | FATAL, ERROR
|
10 | }
|
11 |
|
12 | export class Logger {
|
13 |
|
14 | name;
|
15 | logger;
|
16 | version;
|
17 | silent;
|
18 |
|
19 | constructor() {
|
20 | this.name = pkg.name;
|
21 | this.version = pkg.version;
|
22 | this.logger = fancyLog;
|
23 | this.silent = false;
|
24 | }
|
25 |
|
26 | setVerbose(level: boolean) {
|
27 | this.silent = level;
|
28 | }
|
29 |
|
30 | title(...args) {
|
31 | if(this.silent == false) {
|
32 | this.logger(
|
33 | c.cyan(...args)
|
34 | );
|
35 | }
|
36 | }
|
37 |
|
38 | info(...args) {
|
39 | if(this.silent == false) {
|
40 | this.logger(
|
41 | this.format(LEVEL.INFO, ...args)
|
42 | );
|
43 | }
|
44 | }
|
45 |
|
46 | warn(...args) {
|
47 | if(this.silent == false) {
|
48 | this.logger(
|
49 | this.format(LEVEL.WARN, ...args)
|
50 | );
|
51 | }
|
52 | }
|
53 |
|
54 | error(...args) {
|
55 | if(this.silent == false) {
|
56 | this.logger(
|
57 | this.format(LEVEL.FATAL, ...args)
|
58 | );
|
59 | }
|
60 | }
|
61 |
|
62 | fatal(...args) {
|
63 | if(this.silent == false) {
|
64 | this.error(...args);
|
65 | }
|
66 |
|
67 | }
|
68 | debug(...args) {
|
69 | if(this.silent == false) {
|
70 | this.logger(
|
71 | this.format(LEVEL.DEBUG, ...args)
|
72 | );
|
73 | }
|
74 | }
|
75 |
|
76 | trace(error, file) {
|
77 | this.fatal('Ouch', file);
|
78 | this.fatal('', error);
|
79 | this.warn('ignoring', file);
|
80 | this.warn('see error', '');
|
81 | console.trace(error);
|
82 | }
|
83 |
|
84 | private format(level, ...args) {
|
85 |
|
86 | let pad = (s, l, c='') => {
|
87 | return s + Array( Math.max(0, l - s.length + 1)).join( c )
|
88 | };
|
89 |
|
90 | let msg = args.join(' ');
|
91 | if(args.length > 1) {
|
92 | msg = `${ pad(args.shift(), 13, ' ') }: ${ args.join(' ') }`;
|
93 | }
|
94 |
|
95 |
|
96 | switch(level) {
|
97 | case LEVEL.INFO:
|
98 | msg = c.green(msg);
|
99 | break;
|
100 |
|
101 | case LEVEL.WARN:
|
102 | msg = c.yellow(msg);
|
103 | break;
|
104 |
|
105 | case LEVEL.DEBUG:
|
106 | msg = c.gray(msg);
|
107 | break;
|
108 |
|
109 | case LEVEL.ERROR:
|
110 | case LEVEL.FATAL:
|
111 | msg = c.red(msg);
|
112 | break;
|
113 | }
|
114 |
|
115 | return [
|
116 | msg
|
117 | ].join('');
|
118 | }
|
119 | }
|
120 |
|
121 | export let logger = new Logger();
|