UNPKG

@bbc/http-transport

Version:

A flexible, modular REST client built for ease-of-use and resilience.

48 lines (35 loc) 1.07 kB
'use strict'; function isRetry(ctx) { const attempts = ctx.retryAttempts || []; return attempts.length > 0; } function isCriticalError(ctx) { return ctx.res.statusCode >= 500; } function hasElapsedTime(ctx) { return ctx.res?.elapsedTime !== undefined; } function getBaseMessage(ctx) { return `${ctx.req.getMethod()} ${ctx.req.getUrl()} ${ctx.res.statusCode}`; } function createRequestMessage(ctx) { const res = ctx.res; const message = getBaseMessage(ctx); if (hasElapsedTime(ctx)) return `${message} ${res.elapsedTime} ms`; return message; } function createRetryMessage(ctx) { const message = `Attempt ${ctx.retryAttempts.length} ${getBaseMessage(ctx)}`; if (hasElapsedTime(ctx)) return `${message} ${ctx.res.elapsedTime} ms`; return message; } module.exports = (customLogger) => { const logger = customLogger || console; return async (ctx, next) => { await next(); if (isRetry(ctx) && isCriticalError(ctx)) { return logger.warn(createRetryMessage(ctx)); } logger.info(createRequestMessage(ctx)); }; };