-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathindex.js
46 lines (43 loc) · 1.44 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
const { performance } = require('perf_hooks');
const R = require('ramda');
const logResponse = ({ logger, level, excludeHeaders, event, response, duration }) => {
logger[level](
{
req: {
method: event.httpMethod,
url: event.path,
headers: R.omit(excludeHeaders, event.headers),
},
res: R.omit(['body'], response),
duration,
},
` --> ${event.httpMethod} ${event.path} ${R.propOr('', 'statusCode', response)} ${duration}ns`
);
};
const accessLogMiddleware = ({ logger = console, level = 'info', excludeHeaders = [] } = {}) => ({
before: async ({ event }) => {
// eslint-disable-next-line no-param-reassign
event.requestStart = performance.now();
},
after: async (handler) => {
logResponse({
logger,
level,
excludeHeaders,
event: { ...handler.event },
response: handler.response,
duration: Math.round(performance.now() - handler.event.requestStart) * 1000000,
});
},
onError: async (handler) => {
logResponse({
logger,
level,
excludeHeaders,
event: { ...handler.event },
response: handler.response,
duration: Math.round(performance.now() - handler.event.requestStart) * 1000000,
});
},
});
module.exports = accessLogMiddleware;