@vizydrop/logger
Version:
Vizydrop predefined logger based on winston v3
56 lines (46 loc) • 1.69 kB
JavaScript
/*********************************************************************
* © Copyright IBM Corp. 2025
*********************************************************************/
const onHeaders = require(`on-headers`);
const onFinished = require(`on-finished`);
const {sanitize} = require(`./sanitize`);
const {recordStartTime, getRequestTime} = require(`./requestTime`);
function defaultSkip(req) {
return (
req.url.startsWith(`/status`) ||
req.url.startsWith(`/assets`) ||
req.url.startsWith(`/health`)
);
}
function toNumber(value) {
const result = parseFloat(value);
return Number.isNaN(result) ? 0 : result;
}
function createRequestLogger({logger, skip = defaultSkip}) {
function processRequest(req, res) {
if (skip && skip(req)) {
return;
}
recordStartTime(req)();
onHeaders(res, recordStartTime(res));
const method = req.method.toUpperCase();
const url = sanitize(req.originalUrl || req.url);
onFinished(res, () => {
const timeMs = getRequestTime(req, res);
const contentLength = res.getHeader(`content-length`);
logger.info(
`${method} ${res.statusCode} ${url} (${contentLength ||
`-`} bytes) ${timeMs} ms`,
{
timeMs: toNumber(timeMs),
size: toNumber(contentLength),
type: `outbound`,
statusCode: res.statusCode,
},
);
});
logger.info(`${method} ${url}`, {type: `inbound`});
}
return {processRequest};
}
module.exports = {createRequestLogger};