UNPKG

@zishone/logan

Version:

A logger and log middleware. Why logan? Because it sounds like morgan

45 lines 2.47 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.log = void 0; const basic_auth_1 = __importDefault(require("basic-auth")); const on_finished_1 = __importDefault(require("on-finished")); const on_headers_1 = __importDefault(require("on-headers")); const log = (logger) => { return (req, res, next) => { let hasErrored = false; const logData = {}; req.addLogData = (data) => { for (const key in data) { logData[key] = data[key]; } }; req.addLogError = (error) => { hasErrored = true; logData.error = error; }; req.logger = logger; const requestStartTime = new Date(); let responseStartTime; let responseEndTime; on_headers_1.default(res, () => { responseStartTime = new Date(); }); on_finished_1.default(res, () => { var _a; responseEndTime = new Date(); const log = Object.assign({ 'request.id': req.id, 'request.remote.address': req.ip || (req.connection && req.connection.remoteAddress), 'request.remote.user': (_a = basic_auth_1.default(req)) === null || _a === void 0 ? void 0 : _a.name, 'request.timestamp': requestStartTime.toISOString(), 'request.method': req.method, 'request.url': req.originalUrl || req.url, 'request.http.version': req.httpVersionMajor + '.' + req.httpVersionMinor, 'request.referrer': req.headers.referer || req.headers.referrer, 'request.user.agent': req.headers['user-agent'], 'response.timestamp': responseEndTime === null || responseEndTime === void 0 ? void 0 : responseEndTime.toISOString(), 'response.status': res.headersSent ? res.statusCode : undefined, 'response.content.length': res.headersSent ? res.getHeader('content-length') : undefined, 'response.time': (responseEndTime === null || responseEndTime === void 0 ? void 0 : responseEndTime.getTime()) - (responseStartTime === null || responseStartTime === void 0 ? void 0 : responseStartTime.getTime()) }, logData); if (hasErrored) { logger.error('Request failed', log); } else { logger.info('Request finished', log); } }); next(); }; }; exports.log = log; //# sourceMappingURL=log.js.map