"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.addTransport = addTransport; exports.configureLogger = configureLogger; exports.logger = exports.default = void 0; exports.removeTransport = removeTransport; var _winston = _interopRequireWildcard(require("winston")); var _fs = _interopRequireDefault(require("fs")); var _path = _interopRequireDefault(require("path")); var _winstonDailyRotateFile = _interopRequireDefault(require("winston-daily-rotate-file")); var _lodash = _interopRequireDefault(require("lodash")); var _defaults = _interopRequireDefault(require("../../defaults")); function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; } function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); } function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; } const logger = exports.logger = _winston.default.createLogger(); function configureTransports(options) { const transports = []; if (options) { const silent = options.silent; delete options.silent; try { if (!_lodash.default.isNil(options.dirname)) { const parseServer = new _winstonDailyRotateFile.default(Object.assign({ filename: 'parse-server.info', json: true, format: _winston.format.combine(_winston.format.timestamp(), _winston.format.splat(), _winston.format.json()) }, options)); parseServer.name = 'parse-server'; transports.push(parseServer); const parseServerError = new _winstonDailyRotateFile.default(Object.assign({ filename: 'parse-server.err', json: true, format: _winston.format.combine(_winston.format.timestamp(), _winston.format.splat(), _winston.format.json()) }, options, { level: 'error' })); parseServerError.name = 'parse-server-error'; transports.push(parseServerError); } } catch (e) { /* */ } const consoleFormat = options.json ? _winston.format.json() : _winston.format.simple(); const consoleOptions = Object.assign({ colorize: true, name: 'console', silent, format: _winston.format.combine(_winston.format.splat(), consoleFormat) }, options); transports.push(new _winston.default.transports.Console(consoleOptions)); } logger.configure({ transports }); } function configureLogger({ logsFolder = _defaults.default.logsFolder, jsonLogs = _defaults.default.jsonLogs, logLevel = _winston.default.level, verbose = _defaults.default.verbose, silent = _defaults.default.silent, maxLogFiles } = {}) { if (verbose) { logLevel = 'verbose'; } _winston.default.level = logLevel; const options = {}; if (logsFolder) { if (!_path.default.isAbsolute(logsFolder)) { logsFolder = _path.default.resolve(process.cwd(), logsFolder); } try { _fs.default.mkdirSync(logsFolder); } catch (e) { /* */ } } options.dirname = logsFolder; options.level = logLevel; options.silent = silent; options.maxFiles = maxLogFiles; if (jsonLogs) { options.json = true; options.stringify = true; } configureTransports(options); } function addTransport(transport) { // we will remove the existing transport // before replacing it with a new one removeTransport(transport.name); logger.add(transport); } function removeTransport(transport) { const matchingTransport = logger.transports.find(t1 => { return typeof transport === 'string' ? t1.name === transport : t1 === transport; }); if (matchingTransport) { logger.remove(matchingTransport); } } var _default = exports.default = logger; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfd2luc3RvbiIsIl9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkIiwicmVxdWlyZSIsIl9mcyIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfcGF0aCIsIl93aW5zdG9uRGFpbHlSb3RhdGVGaWxlIiwiX2xvZGFzaCIsIl9kZWZhdWx0cyIsImUiLCJfX2VzTW9kdWxlIiwiZGVmYXVsdCIsIl9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSIsIldlYWtNYXAiLCJyIiwidCIsImhhcyIsImdldCIsIm4iLCJfX3Byb3RvX18iLCJhIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJ1IiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiaSIsInNldCIsImxvZ2dlciIsImV4cG9ydHMiLCJ3aW5zdG9uIiwiY3JlYXRlTG9nZ2VyIiwiY29uZmlndXJlVHJhbnNwb3J0cyIsIm9wdGlvbnMiLCJ0cmFuc3BvcnRzIiwic2lsZW50IiwiXyIsImlzTmlsIiwiZGlybmFtZSIsInBhcnNlU2VydmVyIiwiRGFpbHlSb3RhdGVGaWxlIiwiYXNzaWduIiwiZmlsZW5hbWUiLCJqc29uIiwiZm9ybWF0IiwiY29tYmluZSIsInRpbWVzdGFtcCIsInNwbGF0IiwibmFtZSIsInB1c2giLCJwYXJzZVNlcnZlckVycm9yIiwibGV2ZWwiLCJjb25zb2xlRm9ybWF0Iiwic2ltcGxlIiwiY29uc29sZU9wdGlvbnMiLCJjb2xvcml6ZSIsIkNvbnNvbGUiLCJjb25maWd1cmUiLCJjb25maWd1cmVMb2dnZXIiLCJsb2dzRm9sZGVyIiwiZGVmYXVsdHMiLCJqc29uTG9ncyIsImxvZ0xldmVsIiwidmVyYm9zZSIsIm1heExvZ0ZpbGVzIiwicGF0aCIsImlzQWJzb2x1dGUiLCJyZXNvbHZlIiwicHJvY2VzcyIsImN3ZCIsImZzIiwibWtkaXJTeW5jIiwibWF4RmlsZXMiLCJzdHJpbmdpZnkiLCJhZGRUcmFuc3BvcnQiLCJ0cmFuc3BvcnQiLCJyZW1vdmVUcmFuc3BvcnQiLCJhZGQiLCJtYXRjaGluZ1RyYW5zcG9ydCIsImZpbmQiLCJ0MSIsInJlbW92ZSIsIl9kZWZhdWx0Il0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL0FkYXB0ZXJzL0xvZ2dlci9XaW5zdG9uTG9nZ2VyLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB3aW5zdG9uLCB7IGZvcm1hdCB9IGZyb20gJ3dpbnN0b24nO1xuaW1wb3J0IGZzIGZyb20gJ2ZzJztcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IERhaWx5Um90YXRlRmlsZSBmcm9tICd3aW5zdG9uLWRhaWx5LXJvdGF0ZS1maWxlJztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgZGVmYXVsdHMgZnJvbSAnLi4vLi4vZGVmYXVsdHMnO1xuXG5jb25zdCBsb2dnZXIgPSB3aW5zdG9uLmNyZWF0ZUxvZ2dlcigpO1xuXG5mdW5jdGlvbiBjb25maWd1cmVUcmFuc3BvcnRzKG9wdGlvbnMpIHtcbiAgY29uc3QgdHJhbnNwb3J0cyA9IFtdO1xuICBpZiAob3B0aW9ucykge1xuICAgIGNvbnN0IHNpbGVudCA9IG9wdGlvbnMuc2lsZW50O1xuICAgIGRlbGV0ZSBvcHRpb25zLnNpbGVudDtcblxuICAgIHRyeSB7XG4gICAgICBpZiAoIV8uaXNOaWwob3B0aW9ucy5kaXJuYW1lKSkge1xuICAgICAgICBjb25zdCBwYXJzZVNlcnZlciA9IG5ldyBEYWlseVJvdGF0ZUZpbGUoXG4gICAgICAgICAgT2JqZWN0LmFzc2lnbihcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgZmlsZW5hbWU6ICdwYXJzZS1zZXJ2ZXIuaW5mbycsXG4gICAgICAgICAgICAgIGpzb246IHRydWUsXG4gICAgICAgICAgICAgIGZvcm1hdDogZm9ybWF0LmNvbWJpbmUoZm9ybWF0LnRpbWVzdGFtcCgpLCBmb3JtYXQuc3BsYXQoKSwgZm9ybWF0Lmpzb24oKSksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgb3B0aW9uc1xuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgICAgcGFyc2VTZXJ2ZXIubmFtZSA9ICdwYXJzZS1zZXJ2ZXInO1xuICAgICAgICB0cmFuc3BvcnRzLnB1c2gocGFyc2VTZXJ2ZXIpO1xuXG4gICAgICAgIGNvbnN0IHBhcnNlU2VydmVyRXJyb3IgPSBuZXcgRGFpbHlSb3RhdGVGaWxlKFxuICAgICAgICAgIE9iamVjdC5hc3NpZ24oXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGZpbGVuYW1lOiAncGFyc2Utc2VydmVyLmVycicsXG4gICAgICAgICAgICAgIGpzb246IHRydWUsXG4gICAgICAgICAgICAgIGZvcm1hdDogZm9ybWF0LmNvbWJpbmUoZm9ybWF0LnRpbWVzdGFtcCgpLCBmb3JtYXQuc3BsYXQoKSwgZm9ybWF0Lmpzb24oKSksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgICAgIHsgbGV2ZWw6ICdlcnJvcicgfVxuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgICAgcGFyc2VTZXJ2ZXJFcnJvci5uYW1lID0gJ3BhcnNlLXNlcnZlci1lcnJvcic7XG4gICAgICAgIHRyYW5zcG9ydHMucHVzaChwYXJzZVNlcnZlckVycm9yKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvKiAqL1xuICAgIH1cblxuICAgIGNvbnN0IGNvbnNvbGVGb3JtYXQgPSBvcHRpb25zLmpzb24gPyBmb3JtYXQuanNvbigpIDogZm9ybWF0LnNpbXBsZSgpO1xuICAgIGNvbnN0IGNvbnNvbGVPcHRpb25zID0gT2JqZWN0LmFzc2lnbihcbiAgICAgIHtcbiAgICAgICAgY29sb3JpemU6IHRydWUsXG4gICAgICAgIG5hbWU6ICdjb25zb2xlJyxcbiAgICAgICAgc2lsZW50LFxuICAgICAgICBmb3JtYXQ6IGZvcm1hdC5jb21iaW5lKGZvcm1hdC5zcGxhdCgpLCBjb25zb2xlRm9ybWF0KSxcbiAgICAgIH0sXG4gICAgICBvcHRpb25zXG4gICAgKTtcblxuICAgIHRyYW5zcG9ydHMucHVzaChuZXcgd2luc3Rvbi50cmFuc3BvcnRzLkNvbnNvbGUoY29uc29sZU9wdGlvbnMpKTtcbiAgfVxuXG4gIGxvZ2dlci5jb25maWd1cmUoe1xuICAgIHRyYW5zcG9ydHMsXG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29uZmlndXJlTG9nZ2VyKHtcbiAgbG9nc0ZvbGRlciA9IGRlZmF1bHRzLmxvZ3NGb2xkZXIsXG4gIGpzb25Mb2dzID0gZGVmYXVsdHMuanNvbkxvZ3MsXG4gIGxvZ0xldmVsID0gd2luc3Rvbi5sZXZlbCxcbiAgdmVyYm9zZSA9IGRlZmF1bHRzLnZlcmJvc2UsXG4gIHNpbGVudCA9IGRlZmF1bHRzLnNpbGVudCxcbiAgbWF4TG9nRmlsZXMsXG59ID0ge30pIHtcbiAgaWYgKHZlcmJvc2UpIHtcbiAgICBsb2dMZXZlbCA9ICd2ZXJib3NlJztcbiAgfVxuXG4gIHdpbnN0b24ubGV2ZWwgPSBsb2dMZXZlbDtcbiAgY29uc3Qgb3B0aW9ucyA9IHt9O1xuXG4gIGlmIChsb2dzRm9sZGVyKSB7XG4gICAgaWYgKCFwYXRoLmlzQWJzb2x1dGUobG9nc0ZvbGRlcikpIHtcbiAgICAgIGxvZ3NGb2xkZXIgPSBwYXRoLnJlc29sdmUocHJvY2Vzcy5jd2QoKSwgbG9nc0ZvbGRlcik7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICBmcy5ta2RpclN5bmMobG9nc0ZvbGRlcik7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLyogKi9cbiAgICB9XG4gIH1cbiAgb3B0aW9ucy5kaXJuYW1lID0gbG9nc0ZvbGRlcjtcbiAgb3B0aW9ucy5sZXZlbCA9IGxvZ0xldmVsO1xuICBvcHRpb25zLnNpbGVudCA9IHNpbGVudDtcbiAgb3B0aW9ucy5tYXhGaWxlcyA9IG1heExvZ0ZpbGVzO1xuXG4gIGlmIChqc29uTG9ncykge1xuICAgIG9wdGlvbnMuanNvbiA9IHRydWU7XG4gICAgb3B0aW9ucy5zdHJpbmdpZnkgPSB0cnVlO1xuICB9XG4gIGNvbmZpZ3VyZVRyYW5zcG9ydHMob3B0aW9ucyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhZGRUcmFuc3BvcnQodHJhbnNwb3J0KSB7XG4gIC8vIHdlIHdpbGwgcmVtb3ZlIHRoZSBleGlzdGluZyB0cmFuc3BvcnRcbiAgLy8gYmVmb3JlIHJlcGxhY2luZyBpdCB3aXRoIGEgbmV3IG9uZVxuICByZW1vdmVUcmFuc3BvcnQodHJhbnNwb3J0Lm5hbWUpO1xuXG4gIGxvZ2dlci5hZGQodHJhbnNwb3J0KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZVRyYW5zcG9ydCh0cmFuc3BvcnQpIHtcbiAgY29uc3QgbWF0Y2hpbmdUcmFuc3BvcnQgPSBsb2dnZXIudHJhbnNwb3J0cy5maW5kKHQxID0+IHtcbiAgICByZXR1cm4gdHlwZW9mIHRyYW5zcG9ydCA9PT0gJ3N0cmluZycgPyB0MS5uYW1lID09PSB0cmFuc3BvcnQgOiB0MSA9PT0gdHJhbnNwb3J0O1xuICB9KTtcblxuICBpZiAobWF0Y2hpbmdUcmFuc3BvcnQpIHtcbiAgICBsb2dnZXIucmVtb3ZlKG1hdGNoaW5nVHJhbnNwb3J0KTtcbiAgfVxufVxuXG5leHBvcnQgeyBsb2dnZXIgfTtcbmV4cG9ydCBkZWZhdWx0IGxvZ2dlcjtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsSUFBQUEsUUFBQSxHQUFBQyx1QkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsR0FBQSxHQUFBQyxzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQUcsS0FBQSxHQUFBRCxzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQUksdUJBQUEsR0FBQUYsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFLLE9BQUEsR0FBQUgsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFNLFNBQUEsR0FBQUosc0JBQUEsQ0FBQUYsT0FBQTtBQUFzQyxTQUFBRSx1QkFBQUssQ0FBQSxXQUFBQSxDQUFBLElBQUFBLENBQUEsQ0FBQUMsVUFBQSxHQUFBRCxDQUFBLEtBQUFFLE9BQUEsRUFBQUYsQ0FBQTtBQUFBLFNBQUFHLHlC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Q0FBQ3FCLEtBQUssR0FBR1csUUFBUTtFQUN4QixNQUFNN0IsT0FBTyxHQUFHLENBQUMsQ0FBQztFQUVsQixJQUFJMEIsVUFBVSxFQUFFO0lBQ2QsSUFBSSxDQUFDTSxhQUFJLENBQUNDLFVBQVUsQ0FBQ1AsVUFBVSxDQUFDLEVBQUU7TUFDaENBLFVBQVUsR0FBR00sYUFBSSxDQUFDRSxPQUFPLENBQUNDLE9BQU8sQ0FBQ0MsR0FBRyxDQUFDLENBQUMsRUFBRVYsVUFBVSxDQUFDO0lBQ3REO0lBQ0EsSUFBSTtNQUNGVyxXQUFFLENBQUNDLFNBQVMsQ0FBQ1osVUFBVSxDQUFDO0lBQzFCLENBQUMsQ0FBQyxPQUFPbkQsQ0FBQyxFQUFFO01BQ1Y7SUFBQTtFQUVKO0VBQ0F5QixPQUFPLENBQUNLLE9BQU8sR0FBR3FCLFVBQVU7RUFDNUIxQixPQUFPLENBQUNrQixLQUFLLEdBQUdXLFFBQVE7RUFDeEI3QixPQUFPLENBQUNFLE1BQU0sR0FBR0EsTUFBTTtFQUN2QkYsT0FBTyxDQUFDdUMsUUFBUSxHQUFHUixXQUFXO0VBRTlCLElBQUlILFFBQVEsRUFBRTtJQUNaNUIsT0FBTyxDQUFDVSxJQUFJLEdBQUcsSUFBSTtJQUNuQlYsT0FBTyxDQUFDd0MsU0FBUyxHQUFHLElBQUk7RUFDMUI7RUFDQXpDLG1CQUFtQixDQUFDQyxPQUFPLENBQUM7QUFDOUI7QUFFTyxTQUFTeUMsWUFBWUEsQ0FBQ0MsU0FBUyxFQUFFO0VBQ3RDO0VBQ0E7RUFDQUMsZUFBZSxDQUFDRCxTQUFTLENBQUMzQixJQUFJLENBQUM7RUFFL0JwQixNQUFNLENBQUNpRCxHQUFHLENBQUNGLFNBQVMsQ0FBQztBQUN2QjtBQUVPLFNBQVNDLGVBQWVBLENBQUNELFNBQVMsRUFBRTtFQUN6QyxNQUFNRyxpQkFBaUIsR0FBR2xELE1BQU0sQ0FBQ00sVUFBVSxDQUFDNkMsSUFBSSxDQUFDQyxFQUFFLElBQUk7SUFDckQsT0FBTyxPQUFPTCxTQUFTLEtBQUssUUFBUSxHQUFHSyxFQUFFLENBQUNoQyxJQUFJLEtBQUsyQixTQUFTLEdBQUdLLEVBQUUsS0FBS0wsU0FBUztFQUNqRixDQUFDLENBQUM7RUFFRixJQUFJRyxpQkFBaUIsRUFBRTtJQUNyQmxELE1BQU0sQ0FBQ3FELE1BQU0sQ0FBQ0gsaUJBQWlCLENBQUM7RUFDbEM7QUFDRjtBQUFDLElBQUFJLFFBQUEsR0FBQXJELE9BQUEsQ0FBQW5CLE9BQUEsR0FHY2tCLE1BQU0iLCJpZ25vcmVMaXN0IjpbXX0=