Repository URL to install this package:
|
Version:
1.0.1 ▾
|
@doodle/logger
/
middleware.js
|
|---|
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, source[key]); }); } return target; }
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
/**
* 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 _objectSpread({}, 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`, _objectSpread({}, 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`, _objectSpread({}, 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}`, _objectSpread({}, extractHeaderProperties(req), {
reqUrl: req.originalUrl,
resStatusCode: `${res.statusCode}`
}));
next(err);
},
initialize(app, logger) {
app.locals.logger = logger;
}
};
module.exports = LoggerMiddleware;