@appium/base-driver
Version:
Base driver class for Appium drivers
69 lines • 2.73 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.startLogFormatter = exports.endLogFormatter = void 0;
const lodash_1 = __importDefault(require("lodash"));
require("@colors/colors");
const morgan_1 = __importDefault(require("morgan"));
const logger_1 = require("./logger");
const constants_1 = require("../constants");
const support_1 = require("@appium/support");
/**
* Morgan middleware that logs when the HTTP response finishes.
* Logs method, URL, status (color-coded), response time, and content-length.
*/
exports.endLogFormatter = (0, morgan_1.default)(endLogFormatterHandler);
/**
* Morgan middleware that logs when the HTTP request is received (immediate).
* Logs method and URL; request body is truncated and passed through {@link logger.markSensitive}.
*/
exports.startLogFormatter = (0, morgan_1.default)(startLogFormatterHandler, {
immediate: true,
});
function endLogFormatterHandler(tokens, req, res) {
logger_1.log.info(requestEndLoggingFormat(tokens, req, res));
}
function startLogFormatterHandler(tokens, req, res) {
let reqBody = '';
if (req.body) {
try {
reqBody = lodash_1.default.truncate(lodash_1.default.isString(req.body) ? req.body : JSON.stringify(req.body), { length: constants_1.MAX_LOG_BODY_LENGTH });
}
catch {
// ignore
}
}
logger_1.log.info(requestStartLoggingFormat(tokens, req, res), support_1.logger.markSensitive(reqBody.grey));
}
// Copied the morgan compile function over so that cooler formats may be configured
function compile(fmt) {
fmt = fmt.replace(/"/g, '\\"');
fmt = fmt.replace(/:([-\w]{2,})(?:\[([^\]]+)\])?/g, function replace(_, name, arg) {
return `"\n + (tokens["${name}"](req, res, "${arg}") || "-") + "`;
});
const js = ` return "${fmt}";`;
return new Function('tokens', 'req', 'res', js);
}
function requestEndLoggingFormat(tokens, req, res) {
const status = res.statusCode;
let statusStr = ':status';
if (status >= 500) {
statusStr = statusStr.red;
}
else if (status >= 400) {
statusStr = statusStr.yellow;
}
else if (status >= 300) {
statusStr = statusStr.cyan;
}
else {
statusStr = statusStr.green;
}
const fn = compile(`${'<-- :method :url '.white}${statusStr} ${':response-time ms - :res[content-length]'.grey}`);
return fn(tokens, req, res);
}
const requestStartLoggingFormat = compile(`${'-->'.white} ${':method'.white} ${':url'.white}`);
// #endregion
//# sourceMappingURL=express-logging.js.map