1 | const logUpdate = require('log-update')
|
2 | const chalk = require('chalk')
|
3 | const emoji = require('./emoji')
|
4 |
|
5 | class Logger {
|
6 | constructor(options) {
|
7 | if (options) {
|
8 | this.setOptions(options)
|
9 | }
|
10 | }
|
11 |
|
12 | setOptions({ logLevel, debug, silly, quiet, logUpdate } = {}) {
|
13 | if (debug) {
|
14 | logLevel = 4
|
15 | } else if (quiet) {
|
16 | logLevel = 1
|
17 | } else if (silly) {
|
18 | logLevel = 5
|
19 | }
|
20 | this.logLevel = typeof logLevel === 'number' ? logLevel : 3
|
21 | this.useLogUpdate = typeof logUpdate === 'boolean' ? logUpdate : true
|
22 | }
|
23 |
|
24 | clear() {
|
25 | if (this.useLogUpdate) {
|
26 | logUpdate.clear()
|
27 | }
|
28 | }
|
29 |
|
30 | write(message, persistent = false) {
|
31 | if (persistent) {
|
32 | this.clear()
|
33 | console.log(message)
|
34 | return
|
35 | }
|
36 | if (this.useLogUpdate) {
|
37 | logUpdate(message)
|
38 | } else {
|
39 | console.log(message)
|
40 | }
|
41 | }
|
42 |
|
43 |
|
44 |
|
45 | debug(title, message = '') {
|
46 | if (this.logLevel < 4) {
|
47 | return
|
48 | }
|
49 |
|
50 | this.write(`${chalk.bold(title)} ${chalk.dim(message)}`, true)
|
51 | }
|
52 |
|
53 |
|
54 | silly(title, message) {
|
55 | if (this.logLevel < 5) {
|
56 | return
|
57 | }
|
58 |
|
59 | this.write(`${chalk.bold(title)} ${chalk.dim(message)}`, true)
|
60 | }
|
61 |
|
62 |
|
63 |
|
64 | log(message, update) {
|
65 | if (this.logLevel < 3) {
|
66 | return
|
67 | }
|
68 |
|
69 | this.write(message, !update)
|
70 | }
|
71 |
|
72 |
|
73 | warn(message) {
|
74 | if (this.logLevel < 2) {
|
75 | return
|
76 | }
|
77 |
|
78 | this.status(emoji.warning, message)
|
79 | }
|
80 |
|
81 |
|
82 | error(err) {
|
83 | if (this.logLevel < 1) {
|
84 | return
|
85 | }
|
86 |
|
87 |
|
88 | return this.status(emoji.error, err)
|
89 | }
|
90 |
|
91 |
|
92 |
|
93 | status(emoji, message, update) {
|
94 | if (this.logLevel < 3) {
|
95 | return
|
96 | }
|
97 |
|
98 | if (update && this.useLogUpdate) {
|
99 | return logUpdate(`${emoji} ${message}`)
|
100 | }
|
101 |
|
102 | this.clear()
|
103 | console.log(`${emoji} ${message}`)
|
104 | }
|
105 | }
|
106 |
|
107 | module.exports = new Logger()
|