-
Notifications
You must be signed in to change notification settings - Fork 13
/
logging.js
103 lines (95 loc) · 2.62 KB
/
logging.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
90
91
92
93
94
95
96
97
98
99
100
101
102
import chalk from 'chalk';
import nicelyFormat from 'nicely-format';
import createDebug from 'debug';
const time = () => {
const now = new Date();
const date = new Date(now.getTime() - (now.getTimezoneOffset() * 60000));
return date.toISOString().replace(/.*T(.*)Z/, '$1');
};
const indentText = (text) => text.replace(/^(?!\s+$)/gm, ' '.repeat(13)).trim();
const logger = ({
title,
messages,
logFunction
}) => {
const formattedMessages = messages.map((message) => {
if (typeof message === 'string') {
return message;
}
return nicelyFormat(message, {
highlight: true,
min: true,
theme: {
tag: 'cyan',
content: 'reset',
prop: 'yellow',
value: 'green',
number: 'green',
string: 'reset',
date: 'green',
symbol: 'red',
regex: 'red',
function: 'blue',
error: 'red',
boolean: 'yellow',
label: 'blue',
bracket: 'grey',
comma: 'grey',
misc: 'grey',
key: 'cyan'
}
});
}).map((text) => indentText(text));
logFunction(chalk.gray(time()), `[${title}]`, ...formattedMessages);
};
const createLogger = (title,
{
debugFunction = createDebug(title),
logFunction = console.log
} = {}) => {
return {
debug(...messages) {
logger({
title: chalk.yellow(`DEBUG ${title}`),
messages,
logFunction: debugFunction
});
},
info(...messages) {
logger({
title: chalk.blue(title),
messages,
logFunction
});
},
warn(...messages) {
logger({
title: chalk.yellow(`WARNING ${title}`),
messages,
logFunction
});
},
error(...messages) {
logger({
title: chalk.red(`ERROR ${title}`),
messages,
logFunction
});
},
fatal(...messages) {
logger({
title: chalk.red(`========= FATAL ${title} =========`),
messages,
logFunction
});
},
trace(...messages) {
logger({
title: chalk.red(`TRACE ${title}`),
messages,
logFunction
});
}
};
};
export default createLogger;