diff --git a/server.js b/server.js index d84aa907e..8b0d780ff 100644 --- a/server.js +++ b/server.js @@ -174,7 +174,7 @@ const connectToRedisCluster = async () => { Math.min(CLUSTER_RETRY_BASE_DELAY + times * 50, CLUSTER_RETRY_MAX_DELAY) + Math.random() * CLUSTER_RETRY_JITTER; logger.log( `[${process.env.NODE_ENV}] Redis cluster not yet ready. Retrying in ${delay.toFixed(2)}ms`, - "ERROR", + "WARN", "redis", "api" ); diff --git a/server/utils/logger.js b/server/utils/logger.js index 46167cab4..8f3f1a47a 100644 --- a/server/utils/logger.js +++ b/server/utils/logger.js @@ -5,19 +5,16 @@ const { isString, isEmpty } = require("lodash"); const createLogger = () => { try { - const region = InstanceManager({ - imex: "ca-central-1", - rome: "us-east-2" - }); - const isLocal = isString(process.env?.LOCALSTACK_HOSTNAME) && !isEmpty(process.env?.LOCALSTACK_HOSTNAME); - const logGroupName = isLocal ? "development" : process.env.CLOUDWATCH_LOG_GROUP; const winstonCloudwatchTransportDefaults = { logGroupName: logGroupName, awsOptions: { - region + region: InstanceManager({ + imex: "ca-central-1", + rome: "us-east-2" + }) }, jsonMessage: true }; @@ -29,6 +26,25 @@ const createLogger = () => { ); } + const levelFilter = (levels) => { + return winston.format((info) => { + if (Array.isArray(levels)) { + return levels.includes(info.level) ? info : false; + } else { + return info.level === levels ? info : false; + } + })(); + }; + + const createProductionTransport = (level, logStreamName, filters) => { + return new WinstonCloudWatch({ + level, + logStreamName: logStreamName || level, + format: levelFilter(filters || level), + ...winstonCloudwatchTransportDefaults + }); + }; + const getDevelopmentTransports = () => [ new winston.transports.Console({ level: "silly", @@ -47,21 +63,10 @@ const createLogger = () => { ]; const getProductionTransports = () => [ - new WinstonCloudWatch({ - level: "error", - logStreamName: "errors", - ...winstonCloudwatchTransportDefaults - }), - new WinstonCloudWatch({ - level: "warn", - logStreamName: "warn", - ...winstonCloudwatchTransportDefaults - }), - new WinstonCloudWatch({ - level: "debug", - logStreamName: "debug", - ...winstonCloudwatchTransportDefaults - }) + createProductionTransport("error"), + createProductionTransport("warn"), + createProductionTransport("info"), + createProductionTransport("silly", "debug", ["http", "verbose", "debug", "silly"]) ]; const winstonLogger = winston.createLogger({ @@ -72,19 +77,27 @@ const createLogger = () => { : [...getDevelopmentTransports(), ...getProductionTransports()] }); - return (message, type, user, record, object) => { + const log = (message, type, user, record, meta) => { winstonLogger.log({ level: type.toLowerCase(), - message: message, - user: user, - record: record, - meta: object + message, + user, + record, + meta }); }; + + return { + log, + logger: winstonLogger + }; } catch (e) { - console.error("Logger setup failed", e); - return () => {}; // Return a no-op function in case of failure + console.error("Error setting up enhanced Logger, defaulting to console.: " + e?.message || ""); + return { + log: console.log, + logger: console.log + }; } }; -module.exports = { log: createLogger() }; +module.exports = createLogger();