UNPKG

yekonga-server

Version:
104 lines (84 loc) 3.53 kB
// @ts-nocheck /*global Yekonga, serverLibrary */ const fs = serverLibrary.fs; const path = serverLibrary.path; // const util = require('util'); const datetime = serverLibrary.moment; const express = serverLibrary.express; // ************************************************************************************************* var defaultInterval = 60 * 60 * 24 * 1000; var defaultDateFormat = 'YYYY-MM-DD HH:mm:ss'; // ************************************************************************************************* module.exports = function(options) { const output = (options && options.output)? options.output: false; const dir = path.dirname(options.path); var extracted = path.basename(options.path).split('.'); extracted.pop(); const extension = path.extname(options.path); const basename = extracted.join('.'); return (request, response, next) => { const requestStart = Date.now(); const filename = basename + `-` + datetime().format('YYYY-MM-DD') + extension; const logPath = path.join(dir, filename); if (!fs.existsSync(logPath)) { Yekonga.Helper.writeFile(logPath, ''); } try { var oldWrite = response.write, oldEnd = response.end; var chunks = []; response.write = function (chunk) { chunks.push(Buffer.from(chunk)); return oldWrite.apply(response, arguments); }; response.end = function (chunk) { if (chunk) { chunks.push(Buffer.from(chunk)); } const { Client } = request.Yekonga; const { rawHeaders, httpVersion, method, socket, url, body } = request; const { remoteAddress, remoteFamily } = socket; const { headers, ipAddress, host } = Client || {}; var loggerContent = { timestamp: Date.now(), processingTime: Date.now() - requestStart, request: { rawHeaders: headers, httpVersion, method, remoteAddress: ipAddress, remoteFamily, host, url, body, } } if(output) { var responseBody = Buffer.concat(chunks).toString('utf8'); try { if(typeof responseBody === 'string') { responseBody = JSON.parse(responseBody); } } catch (error) { responseBody = Buffer.concat(chunks).toString('utf8'); } loggerContent.response = { body: responseBody, statusCode: response.statusCode, } } var data = JSON.stringify(loggerContent); fs.appendFile(logPath, data + "\n", (error) => { chunks = null; loggerContent = null; }); oldEnd.apply(response, arguments); }; } catch (error) { console.error(error.message) } if(typeof next === 'function') { return next(); } }; }