UNPKG

@appium/base-driver

Version:

Base driver class for Appium drivers

69 lines 2.73 kB
"use strict"; 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