feature/IO-2998-enhanced-api-logging - Finish

Signed-off-by: Dave Richer <dave@imexsystems.ca>
This commit is contained in:
Dave Richer
2024-10-25 08:11:33 -07:00
parent 1ca8b2a78d
commit 111f280674
2 changed files with 44 additions and 31 deletions

View File

@@ -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();