@teclone/r-server
Version:
A lightweight, extensible web-server with inbuilt routing-engine, static file server, file upload handler, request body parser, middleware support and lots more
134 lines (120 loc) • 4.23 kB
JavaScript
;
Object.defineProperty(exports, '__esModule', { value: true });
var _classCallCheck = require('@babel/runtime/helpers/classCallCheck');
var _createClass = require('@babel/runtime/helpers/createClass');
var _defineProperty = require('@babel/runtime/helpers/defineProperty');
var fs = require('fs');
var nodeUtils = require('@teclone/node-utils');
var os = require('os');
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
function _interopNamespace(e) {
if (e && e.__esModule) return e;
var n = Object.create(null);
if (e) {
Object.keys(e).forEach(function (k) {
if (k !== 'default') {
var d = Object.getOwnPropertyDescriptor(e, k);
Object.defineProperty(n, k, d.get ? d : {
enumerable: true,
get: function () { return e[k]; }
});
}
});
}
n["default"] = e;
return Object.freeze(n);
}
var _classCallCheck__default = /*#__PURE__*/_interopDefaultLegacy(_classCallCheck);
var _createClass__default = /*#__PURE__*/_interopDefaultLegacy(_createClass);
var _defineProperty__default = /*#__PURE__*/_interopDefaultLegacy(_defineProperty);
var fs__namespace = /*#__PURE__*/_interopNamespace(fs);
var Logger = /*#__PURE__*/function () {
function Logger(opts) {
_classCallCheck__default["default"](this, Logger);
_defineProperty__default["default"](this, "errorLogHandle", void 0);
_defineProperty__default["default"](this, "accessLogHandle", void 0);
if (opts.accessLogFile) {
nodeUtils.mkDirSync(opts.accessLogFile);
this.accessLogHandle = fs__namespace.openSync(opts.accessLogFile, 'a');
}
if (opts.errorLogFile) {
nodeUtils.mkDirSync(opts.errorLogFile);
this.errorLogHandle = fs__namespace.openSync(opts.errorLogFile, 'a');
}
}
/**
* log warning message to the console
*/
_createClass__default["default"](Logger, [{
key: "warn",
value: function warn(message) {
console.log('\x1b[1m\x1b[33m%s\x1b[0m', message);
return this;
}
/**
* log info message to the console
*/
}, {
key: "info",
value: function info(message) {
console.log('\x1b[1m\x1b[32m%s\x1b[0m', message);
return this;
}
/**
* close the handles once the server is closed
*/
}, {
key: "close",
value: function close() {
fs__namespace.closeSync(this.errorLogHandle);
fs__namespace.closeSync(this.accessLogHandle);
return this;
}
/**
* runs the error logging
*/
}, {
key: "logError",
value: function logError(err) {
if (err instanceof Error) {
var now = new Date();
if (this.errorLogHandle) {
fs__namespace.writeSync(this.errorLogHandle, "[".concat(now.toUTCString(), "] ").concat(err.stack).concat(os.EOL));
}
if (process.env.NODE_ENV !== 'production') ;
}
return this;
}
/**
* logs access information
*/
}, {
key: "logAccess",
value: function logAccess(req, res) {
if (this.accessLogHandle) {
var protocol = req.encrypted ? 'Https' : 'Http';
var startTime = req.startedAt.toUTCString();
var log = "[".concat(startTime, "] [").concat(req.method, "] '").concat(req.url, " ").concat(protocol, "/").concat(req.httpVersion, "' ").concat(res.statusCode).concat(os.EOL);
fs__namespace.writeSync(this.accessLogHandle, log);
}
}
/**
* log request response profile
*/
}, {
key: "profile",
value: function profile(req, res) {
this.logAccess(req, res);
if (process.env.NODE_ENV !== 'production') {
var requestTime = req.endedAt.getTime() - req.startedAt.getTime();
var responseTime = res.endedAt.getTime() - res.startedAt.getTime();
var template = res.statusCode >= 400 ? '%s: %s \x1b[31m%d\x1b[0m ~%dms ~%dms\x1b[0m %s' : '%s: %s \x1b[32m%d\x1b[0m ~%dms ~%dms\x1b[0m %s';
console.log(template, req.method, req.url, res.statusCode, requestTime, responseTime, req.headers['user-agent'] || 'unknown-ua');
}
return this;
}
}]);
return Logger;
}();
exports.Logger = Logger;
//# sourceMappingURL=Logger.js.map