-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.js
66 lines (56 loc) · 1.4 KB
/
index.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
var safeJSON = require('./formatter').safeJSON
function log (type, data) {
log.info(type, data)
}
log.backends = require('./backends')
log.formatter = require('./formatter')
module.exports = log
var EventEmitter = require('events').EventEmitter
, emitter = new EventEmitter
;
['debug', 'info', 'warning', 'error', 'critical'].forEach(function(level){
log[level] = function(type, data) {
log.write(level, type, data)
}
})
log.write = function (level, message, field_data) {
if (typeof message == 'object') {
if (field_data) message = safeJSON(message)
else {
data = message
message = '<no message>'
}
}
var entry = {
'@message': message,
'@fields': {level: level},
'@tags': [],
'@timestamp': new Date().toISOString()
}
if (field_data) {
for (var k in field_data) {
if (k[0] == '@') entry[k] = field_data[k]
else entry['@fields'][k] = field_data[k]
}
}
log.emit('entry', entry)
// Don't crash process when errors are logged without listeners
if (level === 'error' && log.listeners('error').length == 0) console.error(entry)
else log.emit(level, entry)
}
log.first = function (event, handler) {
emitter.listeners(event).unshift(handler)
}
// Expose all EventEmitter methods directly
;[
'on',
'addListener',
'once',
'removeListener',
'removeAllListeners',
'setMaxListeners',
'listeners',
'emit'
].forEach(function (method) {
log[method] = emitter[method].bind(log)
})