UNPKG

@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
"use strict"; 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;