Repository URL to install this package:
|
Version:
0.0.0-beeb224 ▾
|
/**
* Middleware for express. Logs requests and errors.
*/
const TracingHeader = {
trace: 'X-B3-TraceId',
span: 'X-B3-SpanId',
parent: 'X-B3-ParentSpanId',
exportable: 'X-Span-Export',
};
/**
* @param {Request} req The express request object
*/
function extractHeaderProperties(req) {
const headerProps = {
trace: req.get(TracingHeader.trace),
span: req.get(TracingHeader.span),
parent: req.get(TracingHeader.parent),
exportable: req.get(TracingHeader.exportable),
};
return {
...headerProps,
};
}
const LoggerMiddleware = {
/**
*
* @param {*} req
* @param {*} res
* @param {*} next
*/
expressLogger(req, res, next) {
const { logger } = req.app.locals;
if (res.finished) {
logger.debug(`Request handled`, {
...extractHeaderProperties(req),
reqUrl: req.originalUrl,
resStatusCode: `${res.statusCode}`,
});
} else {
// Express sends a 404 if the response was not yet sent at the end of the middleware chain
// See https://expressjs.com/en/starter/faq.html#how-do-i-handle-404-responses
logger.debug(`Requested unhandled resource`, {
...extractHeaderProperties(req),
reqUrl: req.originalUrl,
resStatusCode: `404`,
});
}
next();
},
/**
*
* @param {*} err
* @param {*} req
* @param {*} res
* @param {*} next
*/
expressErrorLogger(err, req, res, next) {
const { logger } = req.app.locals;
if (!res.finished) {
res.status(500).json({
errorMessage: 'The server could not process the request.',
});
}
logger.error(`Error handling request:\n${err.stack}`, {
...extractHeaderProperties(req),
reqUrl: req.originalUrl,
resStatusCode: `${res.statusCode}`,
});
next(err);
},
initialize(app, logger) {
app.locals.logger = logger;
},
};
module.exports = LoggerMiddleware;