chainode
Version:
A private blockchain network based on node.js
30 lines (25 loc) • 841 B
JavaScript
;
/*
Handle express errors using a generic inherited logger
*/
// Select logger by response status code
const selectLogger = (res, logger) => {
if (res.statusCode >= 200 && res.statusCode < 300) return logger.info;
if (res.statusCode >= 300 && res.statusCode < 400) return logger.warn;
return logger.error;
}
module.exports = (componentName, logger) => (req, res, next) => {
const startTime = Date.now();
if (res.headersSent) {
const log = selectLogger(res, logger);
log(componentName, req.method, req.url, res.statusCode);
} else {
res.on('finish', function() {
const endTime = Date.now();
const duration = endTime-startTime;
const log = selectLogger(res, logger);
log(componentName, req.method, req.url, res.statusCode, '-', duration, 'ms');
})
}
return next();
};