durabull
Version:
A durable workflow engine built on top of BullMQ and Redis
81 lines (80 loc) • 2.33 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.createStructuredLogger = exports.createLoggerFromConfig = exports.getLogger = void 0;
const global_1 = require("../config/global");
const noop = () => {
/* noop */
};
const noopLogger = {
info: noop,
warn: noop,
error: noop,
debug: noop,
};
const normalize = (logger) => {
if (!logger) {
return noopLogger;
}
return {
info: (...args) => {
logger.info?.(...args);
},
warn: (...args) => {
logger.warn?.(...args);
},
error: (...args) => {
logger.error?.(...args);
},
debug: (...args) => {
logger.debug?.(...args);
},
};
};
const consoleLogger = {
info: console.log.bind(console),
warn: console.warn.bind(console),
error: console.error.bind(console),
debug: console.debug.bind(console),
};
function getLogger() {
const instance = global_1.Durabull.getActive();
if (instance) {
return createLoggerFromConfig(instance.getConfig().logger);
}
return consoleLogger;
}
exports.getLogger = getLogger;
function createLoggerFromConfig(logger) {
return normalize(logger);
}
exports.createLoggerFromConfig = createLoggerFromConfig;
/**
* Create a structured logger with context
*/
function createStructuredLogger(context) {
const baseLogger = getLogger();
const formatMessage = (...args) => {
const contextStr = Object.entries(context)
.filter(([_, value]) => value !== undefined)
.map(([key, value]) => `${key}=${value}`)
.join(' ');
const message = args.length > 0 && typeof args[0] === 'string' ? args[0] : '';
const rest = args.length > 1 ? args.slice(1) : [];
return [`[${contextStr}] ${message}`, ...rest];
};
return {
info: (...args) => {
baseLogger.info(...formatMessage(...args));
},
warn: (...args) => {
baseLogger.warn(...formatMessage(...args));
},
error: (...args) => {
baseLogger.error(...formatMessage(...args));
},
debug: (...args) => {
baseLogger.debug(...formatMessage(...args));
},
};
}
exports.createStructuredLogger = createStructuredLogger;