-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy path43.js
More file actions
74 lines (62 loc) · 2.01 KB
/
Copy path43.js
File metadata and controls
74 lines (62 loc) · 2.01 KB
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
'use strict';
var bunyan = require('bunyan');
var uuid = require('uuid');
var _ = require('lodash');
var path = require('path');
module.exports = function requestLogger(options) {
options = _.merge({
requestIdHeader: 'x-request-id',
conversationIdHeader: 'x-conversation-id'
}, options);
var logger = options.logger || createLogger();
return function(req, res, next) {
var startTime = Date.now();
// create child logger with custom tracking ids
req.log = logger.child({
reqId: getHeaderTrackingId(req, res, options.requestIdHeader, 'requestId'),
conversationId: getHeaderTrackingId(req, res, options.conversationIdHeader, 'conversationId')
});
res.on('finish', function responseSent() {
if (req.skipRequestLog) { return; }
req.log.info(createLogMeta(req, res, startTime), 'request');
});
next();
};
};
function createLogMeta(req, res, startTime) {
return {
method: req.method,
url: req.originalUrl,
httpVersion: getHttpVersion(req),
statusCode: res.statusCode,
contentLength: res['content-length'],
referrer: getReferrer(req),
userAgent: req.headers['user-agent'],
remoteAddress: getIp(req),
duration: Date.now() - startTime
};
}
function createLogger() {
var pkg = require(path.resolve('package.json'));
return bunyan.createLogger({
name: pkg.name
});
}
function getHeaderTrackingId(req, res, headerName, reqKey) {
var trackingId = req.headers[headerName] || uuid.v1();
req[reqKey] = trackingId;
res.setHeader(headerName, trackingId);
return trackingId;
}
function getIp(req) {
return req.ip ||
req._remoteAddress ||
(req.connection && req.connection.remoteAddress) ||
undefined;
}
function getHttpVersion(req) {
return req.httpVersionMajor + '.' + req.httpVersionMinor;
}
function getReferrer(req) {
return req.headers.referer || req.headers.referrer;
}