@httpc/kit
Version:
httpc toolbox for building function-based API with minimal code and end-to-end type safety
68 lines (67 loc) • 2.59 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.RequestLoggerMiddleware = void 0;
const perf_hooks_1 = require("perf_hooks");
const server_1 = require("@httpc/server");
const context_1 = require("./context");
const PRESET = {
defaults: {
logBegin: true,
logParameters: false,
logRequestId: false,
logResult: false,
},
development: {
logBegin: true,
logParameters: true,
logRequestId: false,
logResult: false,
},
production: {
logBegin: false,
logParameters: false,
logRequestId: false,
logResult: false,
}
};
function RequestLoggerMiddleware(options) {
const preset = PRESET[process.env.NODE_ENV || ""] || PRESET.defaults;
const { logBegin, logParameters, logRequestId, logResult, } = { ...preset, ...options };
function writeBegin(logger, requestId, call) {
requestId = logRequestId ? `(${requestId})` : "";
logger.verbose("Request%s:begin > /%s", requestId, call.path);
if (logParameters) {
logger.debug("Request%s:params > /%s %o", requestId, call.path, call.params);
}
}
function writeEnd(logger, requestId, call, begin, result) {
requestId = logRequestId ? `(${requestId})` : "";
const duration = (perf_hooks_1.performance.now() - begin).toFixed(0);
const level = result && result instanceof Error ? "error" : "info";
if (level === "info") {
logger.info("Request%s:end > /%s(%dms)", requestId, call.path, duration);
if (logResult) {
logger.debug(level, "Request%s:result > /%s(%dms) %o", requestId, call.path, duration, result);
}
}
else if (level === "error") {
logger.error("Request%s:end > /%s(%dms) %o", requestId, call.path, duration, result);
}
}
return async (call, next) => {
const { requestId } = (0, server_1.useContext)();
const logger = (0, context_1.useLogger)();
const timestamp = perf_hooks_1.performance.now();
if (logBegin) {
writeBegin(logger, requestId, call);
}
return await next(call).then(result => {
writeEnd(logger, requestId, call, timestamp, result);
return result;
}, error => {
writeEnd(logger, requestId, call, timestamp, error);
throw error;
});
};
}
exports.RequestLoggerMiddleware = RequestLoggerMiddleware;