@zishone/logan
Version:
A logger and log middleware. Why logan? Because it sounds like morgan
45 lines • 2.47 kB
JavaScript
;
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