-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.js
67 lines (58 loc) · 1.52 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
67
const winston = require('winston');
const { createLogger, format } = winston;
function getReq(info) {
try {
return info.meta.req;
} catch (e) {
return;
}
}
const prodFormat = ({ requestIdGetter }) => {
const prodFormat = format((info) => {
const fields = {
[Symbol.for('level')]: info.level, // required by Winston
level: info.level.toUpperCase(),
message: info.message,
};
const req = getReq(info);
let requestId;
if (req) {
fields.http_method = req.method;
fields.http_path = req.url;
fields.http_host = req.headers.host;
requestIdGetter && (requestId = requestIdGetter(req));
requestId && (fields.request_id = requestId);
}
return fields;
});
return prodFormat();
};
const createDevLogger = () => createLogger({
format: format.combine(
format.colorize(),
format.timestamp(),
format.align(),
format.printf(info => `${info.timestamp} ${info.level}: ${info.message}`)
),
transports: [
new winston.transports.Console()
],
exitOnError: false
});
const createProdLogger = ({ requestIdGetter }) => createLogger({
format: format.combine(
format.timestamp(),
prodFormat({ requestIdGetter }),
format.json()
),
transports: [
new winston.transports.Console()
],
exitOnError: false
});
const getPreconfiguredLogger = ({ environment, requestIdGetter }) => {
return environment === 'production' ? createProdLogger({ requestIdGetter }) : createDevLogger();
};
module.exports = {
getPreconfiguredLogger
};