-
Notifications
You must be signed in to change notification settings - Fork 6
/
logger.js
119 lines (104 loc) · 2.91 KB
/
logger.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
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
var util = require('util'),
winston = require('winston'),
request = require('request'),
common = require('winston/lib/winston/common'),
os = require('os'),
Transport = require('winston/lib/winston/transports/transport').Transport;
const logstash_http_endpoint = process.env.LOGSTASH_ENDPOINT;
sailsLogLevels = {
silent: 0,
error: 1,
warn: 2,
info: 3,
verbose: 4,
debug: 5,
silly: 6
};
var postToLogstash = function (data, callback) {
request({
url: 'http://' + logstash_http_endpoint + ':12345',
method: 'POST',
body: data,
json: true
}, function (err, response, body) {
if (err) return callback(err)
if (!err && response.statusCode == 200)
return callback(null, true);
});
}
var logstashErrorTransporter = winston.transports.logstashErrorTransporter = function (options) {
Transport.call(this, options);
options = options || {};
this.json = true;
this.colorize = false;
this.prettyPrint = false;
this.timestamp = typeof options.timestamp !== 'undefined' ? options.timestamp : false;
this.showLevel = options.showLevel === undefined ? true : options.showLevel;
this.label = options.label || null;
this.logstash = false;
this.depth = options.depth || null;
this.align = options.align || false;
}
//
// Inherit from `winston.Transport` so you can take advantage
// of the base functionality and `.handleExceptions()`.
//
util.inherits(logstashErrorTransporter, winston.Transport);
logstashErrorTransporter.prototype.log = function (level, msg, meta, callback) {
var self = this;
if (typeof msg !== 'string') {
msg = '' + msg;
}
var output = common.log({
level: level,
message: msg,
meta: meta,
json: this.json,
logstash: this.logstash,
colorize: this.colorize,
prettyPrint: this.prettyPrint,
timestamp: this.timestamp,
showLevel: this.showLevel,
stringify: this.stringify,
label: this.label,
depth: this.depth,
formatter: this.formatter,
humanReadableUnhandledException: this.humanReadableUnhandledException
});
output = JSON.parse(output);
delete output.trace;
//ADD env and service
output.env = process.env.NODE_ENV
output.service = process.env.MICRO_SERVICE
// after processing the log push to logstash
postToLogstash(output, callback);
};
module.exports = {
sailsLogLevels: sailsLogLevels,
winston: winston,
// need to call this function for creating a new winston logger instance
getLogger: function (logLevel) {
var sentLogLevel = logLevel ? logLevel: 'info';
var logger = new winston.Logger({
levels: sailsLogLevels,
exitOnError: false,
transports: [
new (winston.transports.Console)({
name: sentLogLevel,
level: sentLogLevel,
colorize: false,
handleExceptions: true,
humanReadableUnhandledException: true,
timestamp: true
}),
new (logstashErrorTransporter)({
level: 'error',
handleExceptions: true,
humanReadableUnhandledException: false,
timestamp: true
})
]
});
return logger;
}
};