-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathindex.coffee
139 lines (119 loc) · 3.86 KB
/
index.coffee
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
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
chalk = require 'chalk'
util = require 'util'
module.exports = (vorpal, options) ->
logger =
options: options ? {}
filter: {}
formatters: {}
printDate: () ->
if logger.options.printDate is true
date = new Date
normalisedDate = new Date(date - (date.getTimezoneOffset() * 60 * 1000))
return chalk.grey('[' + normalisedDate.toISOString().replace(/T/, ' ').replace(/\..+/, '') + ']') + ' '
else
return ''
doLog: (formatter, msg) ->
if logger.filter formatter
if vorpal.activeCommand?
vorpal.activeCommand.log formatter.format msg
else
vorpal.log formatter.format msg
setFilter: (filter) ->
if typeof filter is 'function'
logger.filter = filter
else if typeof filter is 'number'
logger.filter = (formatter) ->
return formatter.level >= filter
else if typeof filter is 'string'
try
lvl = logger.formatters[filter].level
logger.filter = (formatter) ->
return formatter.level >= lvl
catch error
throw new TypeError 'Not the name of a formatter'
else
throw new TypeError 'filter must be a number, the name of a formatter, or a filter function'
printMsg: (msg) ->
if vorpal.activeCommand?
vorpal.activeCommand.log msg
else
vorpal.log msg
addFormatter: (name, level, format) ->
logger.formatters[name] =
level: level
format: format
logger[name] = (msg) ->
logger.doLog logger.formatters[name], msg
vorpal.logger = logger
vorpal.command 'loglevel <level>'
.description 'set the log level'
.hidden()
.action (args, cb) ->
try
logger.setFilter args.level
catch
logger.error "#{args.level} is not a valid loglevel."
cb()
#
#Default settings
#
defaultFormatters =
debug:
level: 10
format: (msg) ->
if typeof msg is 'string'
msg = logger.options.preformat msg if logger.options.preformat?
else
msg = util.inspect msg
return "#{logger.printDate()}#{chalk.dim '[debug]'} #{msg}"
log:
level: 20
format: (msg) ->
if typeof msg is 'string'
msg = logger.options.preformat msg if logger.options.preformat?
else
msg = util.inspect msg
return "#{logger.printDate()}#{msg}"
info:
level: 20
format: (msg) ->
if typeof msg is 'string'
msg = logger.options.preformat msg if logger.options.preformat?
else
msg = util.inspect msg
return "#{logger.printDate()}#{chalk.blue '[info]'} #{msg}"
confirm:
level: 20
format: (msg) ->
if typeof msg is 'string'
msg = logger.options.preformat msg if logger.options.preformat?
else
msg = util.inspect msg
return "#{logger.printDate()}#{chalk.green '[confirmation]'} #{msg}"
warn:
level: 30
format: (msg) ->
if typeof msg is 'string'
msg = logger.options.preformat msg if logger.options.preformat?
else
msg = util.inspect msg
return "#{logger.printDate()}#{chalk.yellow '[warning]'} #{msg}"
error:
level: 40
format: (msg) ->
if typeof msg is 'string'
msg = logger.options.preformat msg if logger.options.preformat?
else
msg = util.inspect msg
return "#{logger.printDate()}#{chalk.red '[error]'} #{msg}"
fatal:
level: 50
format: (msg) ->
if typeof msg is 'string'
msg = logger.options.preformat msg if logger.options.preformat?
else
msg = util.inspect msg
return "#{logger.printDate()}#{chalk.bgRed '[fatal]'} #{msg}"
for name, formatter of defaultFormatters
logger.addFormatter name, formatter.level, formatter.format
logger.setFilter 'info'