2025-02-11 18:05:06 +00:00
|
|
|
import nconf from 'nconf';
|
2024-06-14 13:51:10 +00:00
|
|
|
import { v4 as uuid } from 'uuid';
|
2024-06-26 17:30:13 +00:00
|
|
|
import omit from 'lodash/omit';
|
2024-06-14 13:51:10 +00:00
|
|
|
import logger from '../libs/logger';
|
|
|
|
|
|
2025-02-11 18:05:06 +00:00
|
|
|
const SLOW_REQUEST_THRESHOLD = nconf.get('SLOW_REQUEST_THRESHOLD');
|
|
|
|
|
|
2024-06-26 17:30:13 +00:00
|
|
|
function buildBaseLogData (req) {
|
|
|
|
|
return {
|
2024-06-14 13:51:10 +00:00
|
|
|
requestId: req.requestIdentifier,
|
|
|
|
|
method: req.method,
|
|
|
|
|
url: req.originalUrl,
|
2024-06-26 17:30:13 +00:00
|
|
|
|
|
|
|
|
headers: omit(req.headers, ['x-api-key', 'cookie', 'password', 'confirmPassword']),
|
|
|
|
|
body: omit(req.body, ['password', 'confirmPassword']),
|
|
|
|
|
query: omit(req.query, ['password', 'confirmPassword']),
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export const logRequestEnd = (req, res) => {
|
|
|
|
|
const now = Date.now();
|
|
|
|
|
const requestTime = now - req.requestStartTime;
|
|
|
|
|
const data = buildBaseLogData(req);
|
|
|
|
|
data.duration = requestTime;
|
|
|
|
|
data.endTime = now;
|
|
|
|
|
data.statusCode = res.statusCode;
|
|
|
|
|
logger.info('Request completed', data);
|
2024-06-14 13:51:10 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
|
|
export const logRequestData = (req, res, next) => {
|
|
|
|
|
req.requestStartTime = Date.now();
|
|
|
|
|
req.requestIdentifier = uuid();
|
2024-06-26 17:30:13 +00:00
|
|
|
const data = buildBaseLogData(req);
|
|
|
|
|
data.startTime = req.requestStartTime;
|
|
|
|
|
logger.info('Request started', data);
|
2024-06-14 13:51:10 +00:00
|
|
|
req.on('close', () => {
|
|
|
|
|
logRequestEnd(req, res);
|
|
|
|
|
});
|
|
|
|
|
next();
|
|
|
|
|
};
|
2025-02-11 18:05:06 +00:00
|
|
|
|
|
|
|
|
export const logSlowRequests = (req, res, next) => {
|
|
|
|
|
req.requestStartTime = Date.now();
|
|
|
|
|
req.on('close', () => {
|
|
|
|
|
const requestTime = Date.now() - req.requestStartTime;
|
|
|
|
|
if (requestTime > SLOW_REQUEST_THRESHOLD) {
|
|
|
|
|
const data = buildBaseLogData(req);
|
|
|
|
|
data.duration = requestTime;
|
|
|
|
|
data.endTime = Date.now();
|
|
|
|
|
data.statusCode = res.statusCode;
|
|
|
|
|
logger.error(Error('Slow request'), data);
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
next();
|
|
|
|
|
};
|