UNPKG

@fdm-monster/server

Version:

FDM Monster is a bulk OctoPrint manager to set up, configure and monitor 3D printers. Our aim is to provide extremely optimized websocket performance and reliability.

134 lines (133 loc) 5.82 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); function _export(target, all) { for(var name in all)Object.defineProperty(target, name, { enumerable: true, get: all[name] }); } _export(exports, { createStaticLogger: function() { return createStaticLogger; }, getStaticLogger: function() { return getStaticLogger; }, logContextClassProperty: function() { return logContextClassProperty; } }); const _winston = /*#__PURE__*/ _interop_require_default(require("winston")); const _nodeprocess = /*#__PURE__*/ _interop_require_default(require("node:process")); const _serverconstants = require("../../server.constants"); const _lokiloggingtransport = require("./loki-logging.transport"); const _fileloggingtransport = require("./file-logging.transport"); const _envutils = require("../../utils/env.utils"); function _interop_require_default(obj) { return obj && obj.__esModule ? obj : { default: obj }; } let staticLogger = null; const levelMap = { error: "ERR", warn: "WRN", info: "INF", debug: "DBG", http: "HTT", verbose: "VRB", silly: "SLY" }; const logContextClassProperty = "class"; function getStaticLogger() { if (!staticLogger) { throw new Error("Logger not yet initialized."); } return staticLogger; } function createStaticLogger(config) { if (staticLogger) { return; } const isProd = _nodeprocess.default.env[_serverconstants.AppConstants.NODE_ENV_KEY] === _serverconstants.AppConstants.defaultProductionEnv; const isTest = _nodeprocess.default.env[_serverconstants.AppConstants.NODE_ENV_KEY] === _serverconstants.AppConstants.defaultTestEnv; const effectiveLogLevel = isProd || isTest ? "warn" : "debug"; const lokiTransport = (0, _lokiloggingtransport.createLokiLoggingTransport)({ logLevel: effectiveLogLevel }); const extraWinstonTransports = []; if (lokiTransport) { extraWinstonTransports.push(lokiTransport); } const fileLoggerTransport = (0, _fileloggingtransport.createFileLoggingTransport)({ enabled: config.enableFileLogs, isTest }); if (fileLoggerTransport) { extraWinstonTransports.push(fileLoggerTransport); } staticLogger = _winston.default.createLogger({ transports: [ ...extraWinstonTransports, new _winston.default.transports.Console({ level: effectiveLogLevel, format: _winston.default.format.combine(...(0, _envutils.isDevelopmentEnvironment)() && _nodeprocess.default.env[_serverconstants.AppConstants.ENABLE_COLORED_LOGS_KEY] == "true" ? [ _winston.default.format((info)=>{ info.rawLevel = info.level; return info; })(), _winston.default.format.colorize({ colors: { error: "red", warn: "yellow", info: "white", debug: "gray", http: "magenta", verbose: "cyan", silly: "gray" }, level: true, message: true, all: false }), _winston.default.format.printf((info)=>{ const now = new Date(); const timestamp = `${now.toISOString().split("T")[0]} ${now.toTimeString().split(" ")[0]}.${now.getMilliseconds().toString().padStart(3, "0")}`; const levelAbbr = levelMap[info.rawLevel] ?? info.rawLevel.substring(0, 3).toUpperCase(); const gray = "\x1b[90m"; const reset = info.message.substring(0, 5) ?? "\x1b[0m"; const numberRegex = /\b\d+\b/g; const coloredMessage = info.message.replace(numberRegex, (match)=>`\x1b[35m${match}${reset}`); const serviceName = info[logContextClassProperty] ?? "unknown"; let logEntry = `${gray}[${timestamp} ${reset}${levelAbbr}${reset}${gray}]${reset} ${gray}[${reset}${serviceName}${gray}]${reset} ${coloredMessage}`; if (info.meta) { const metaString = JSON.stringify(info.meta); const coloredMeta = metaString.replace(numberRegex, (match)=>`\x1b[35m${match}${reset}`); logEntry += ` ${coloredMeta}`; } return logEntry; }) ] : []) }) ], format: _winston.default.format.printf((info)=>{ const now = new Date(); const timestamp = `${now.toISOString().split("T")[0]} ${now.toTimeString().split(" ")[0]}.${now.getMilliseconds().toString().padStart(3, "0")}`; const levelAbbr = levelMap[info.level] || `[${info.level.substring(0, 3).toUpperCase()}]`; const serviceName = info[logContextClassProperty] ?? "unknown"; let message = `[${timestamp} ${levelAbbr}] [${serviceName}] ${info.message}`; if (info.meta) { const pascalCaseMeta = Object.entries(info.meta).reduce((acc, [key, value])=>{ const pascalKey = key.charAt(0).toUpperCase() + key.slice(1); acc[pascalKey] = value; return acc; }, {}); message += ` ${JSON.stringify(pascalCaseMeta)}`; } return message; }) }); } //# sourceMappingURL=static.logger.js.map