UNPKG

2.41 kBJavaScriptView Raw
1const expressWinston = require('express-winston'); // https://github.com/bithavoc/express-winston
2const uuidv1 = require('uuid/v1');
3const { lw } = require('@hatsa/log/transports/googlecloud');
4
5const createRequestLogger = ({logger}) => expressWinston.logger({
6 winstonInstance: logger,
7 expressFormat: true,
8 metaField: null, //'express',
9 meta: true,
10 ignoreRoute: req => {
11
12 if (req.path.startsWith('/assets/'))
13 return true;
14
15 if (req.path.startsWith('/static/'))
16 return true;
17
18 return false;
19 }
20});
21
22const createErrorLogger = ({logger}) => expressWinston.errorLogger({
23 winstonInstance: logger,
24 metaField: null, //'express',
25 // dumpExceptions: true,
26 // showStack: false,
27 msg: "{{err.message}}", //msg: i can be a function too!
28 // expressFormat: true,
29 level: 'error' //var level = _.isFunction(options.level) ? options.level(req, res, err) : options.level;
30});
31
32const loggerMiddleware = ({logger}) => (req, res, next) => {
33
34 const traceHeader = req.get('x-cloud-trace-context') || '';
35 const traceId = traceHeader.includes('/') ? traceHeader.split('/')[0] : undefined;
36
37 const aeReqId = req.get('x-appengine-request-log-id');
38 const cfReqId = req.get('function-execution-id');
39 const reqId = aeReqId || cfReqId || uuidv1();
40
41 const meta = { labels: { execution_id: reqId } };
42
43 // Poor mans tracing alternative (non promise based like sd_mw). Does this work?
44 if (traceId)
45 meta['logging.googleapis.com/trace'] = `projects/hatsa-tst-01/traces/${traceId}`;
46
47 req.log = logger.child(meta);
48
49 next();
50
51 /**
52 Poor mans alternative (non promise based like sd_mw):
53
54 Header from App-Engine:
55 x-cloud-trace-context: "71d942f0a6ad4ac9acf48da79c0361ed/10502738401706661831;o=1"
56
57 Meaning (https://cloud.google.com/trace/docs/troubleshooting):
58 x-cloud-trace-context: TRACE_ID/SPAN_ID;o=TRACE_TRUE
59
60 Log metadata to key-values set:
61 'logging.googleapis.com/trace': `projects/${PROJECT_ID}/traces/${TRACE_ID}`;
62 'logging.googleapis.com/trace': 'projects/hatsa-tst-01/traces/71d942f0a6ad4ac9acf48da79c0361ed'
63 */
64};
65
66const genStackdriverLogTraceMw = logger => lw.express.makeMiddleware(logger);
67
68module.exports = {
69 createRequestLogger,
70 createErrorLogger,
71 loggerMiddleware,
72 genStackdriverLogTraceMw
73};
\No newline at end of file