UNPKG

2.35 kBJavaScriptView Raw
1const chalk = require('chalk');
2
3const LOG_LEVEL = {
4 NONE: 0,
5 DEBUG: 1,
6 LOG: 2,
7 WARN: 4,
8 ERROR: 8,
9};
10
11/**
12 * Chalk styles for logger strings.
13 */
14const Styles = {
15 debug: chalk.reset.blue,
16 log: chalk.reset,
17 warn: chalk.reset.yellow,
18 error: chalk.reset.red,
19};
20
21const stylize = (label, style, args) => {
22 const styledLabel = style(label);
23 const [firstArg, ...rest] = args;
24 if (typeof firstArg === 'string') {
25 return [`${styledLabel} ${firstArg}`, ...rest];
26 }
27 return [styledLabel, ...args];
28};
29
30class Logger {
31 error(...args) {
32 console.error(...stylize('[ERROR]', Styles.error, args));
33 }
34 warn(...args) {
35 console.warn(...stylize('[WARNING]', Styles.warn, args));
36 }
37 log(...args) {
38 console.log(...args);
39 }
40 debug(...args) {
41 console.debug(...stylize('[DEBUG]', Styles.log, args));
42 }
43 group(...args) {
44 console.group(...args);
45 }
46 groupEnd(...args) {
47 console.groupEnd(...args);
48 }
49}
50
51let currentLogger = new Logger();
52let currentLogLevel = LOG_LEVEL.ERROR;
53
54const setLogger = logger => {
55 currentLogger = logger;
56};
57
58const setLogLevel = level => {
59 switch (level) {
60 case LOG_LEVEL.DEBUG:
61 currentLogLevel =
62 LOG_LEVEL.DEBUG | LOG_LEVEL.LOG | LOG_LEVEL.WARN | LOG_LEVEL.ERROR;
63 break;
64 case LOG_LEVEL.LOG:
65 currentLogLevel = LOG_LEVEL.LOG | LOG_LEVEL.WARN | LOG_LEVEL.ERROR;
66 break;
67 case LOG_LEVEL.WARN:
68 currentLogLevel = LOG_LEVEL.WARN | LOG_LEVEL.ERROR;
69 break;
70 case LOG_LEVEL.ERROR:
71 currentLogLevel = LOG_LEVEL.ERROR;
72 break;
73 case LOG_LEVEL.NONE:
74 default:
75 currentLogLevel = LOG_LEVEL.NONE;
76 }
77};
78
79const shouldLog = level => {
80 return currentLogLevel & level;
81};
82
83const logger = {
84 error(...args) {
85 if (shouldLog(LOG_LEVEL.ERROR)) {
86 currentLogger.error(...args);
87 }
88 },
89 warn(...args) {
90 if (shouldLog(LOG_LEVEL.WARN)) {
91 currentLogger.warn(...args);
92 }
93 },
94 log(...args) {
95 if (shouldLog(LOG_LEVEL.LOG)) {
96 currentLogger.log(...args);
97 }
98 },
99 debug(...args) {
100 if (shouldLog(LOG_LEVEL.DEBUG)) {
101 currentLogger.debug(...args);
102 }
103 },
104 group(...args) {
105 currentLogger.group(...args);
106 },
107 groupEnd(...args) {
108 currentLogger.groupEnd(...args);
109 },
110};
111
112module.exports = {
113 LOG_LEVEL,
114 Styles,
115 setLogger,
116 setLogLevel,
117 logger,
118};