1 | 'use strict'
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 | const { get } = require('lodash')
|
8 |
|
9 | function processHeaderNames (property) {
|
10 | if (property && property.length) {
|
11 | return property.map(function (name) {
|
12 | return name.toLowerCase()
|
13 | })
|
14 | } else {
|
15 | return false
|
16 | }
|
17 | }
|
18 |
|
19 | function requestSerializer (req) {
|
20 | const config = require('config').get('logs.http')
|
21 |
|
22 | var obj = {
|
23 | method: req.method,
|
24 | url: req.originalUrl || req.url,
|
25 | headers: req.headers,
|
26 | query: req.query,
|
27 | remoteAddress: get(req, 'connection.remoteAddress'),
|
28 | remotePort: get(req, 'connection.remotePort')
|
29 | }
|
30 |
|
31 | const obscureHeaders = processHeaderNames(config.get('obscureHeaders'))
|
32 | const excludeHeaders = processHeaderNames(config.get('excludeHeaders'))
|
33 |
|
34 | if (obj.headers && (obscureHeaders || excludeHeaders)) {
|
35 | obj.headers = Object.keys(obj.headers).reduce(function (memo, name) {
|
36 | if (excludeHeaders && excludeHeaders.includes(name)) {
|
37 | return memo
|
38 | }
|
39 |
|
40 | if (obscureHeaders && obscureHeaders.includes(name)) {
|
41 | memo[name] = null
|
42 | return memo
|
43 | }
|
44 |
|
45 | memo[name] = obj.headers[name]
|
46 | return memo
|
47 | }, {})
|
48 | }
|
49 |
|
50 | return obj
|
51 | }
|
52 |
|
53 | module.exports = requestSerializer
|