@kermank/nldp
Version:
A modular date/time parser for converting natural language into dates and times
67 lines • 2.66 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.Logger = void 0;
const winston_1 = __importDefault(require("winston"));
const uuid_1 = require("uuid");
const { combine, timestamp, printf, colorize } = winston_1.default.format;
// Track the current operation ID
let currentOperationId = null;
// Color scheme for different log levels
const colors = {
error: 'red',
warn: 'yellow',
info: 'green',
debug: 'blue'
};
// Add colors to Winston
winston_1.default.addColors(colors);
// Format context object for better readability
const formatContext = (context) => {
if (!context || Object.keys(context).length === 0)
return '';
const formatted = Object.entries(context)
.map(([key, value]) => {
const valueStr = typeof value === 'object'
? JSON.stringify(value, null, 2)
: String(value);
return `\n ${key}: ${valueStr}`;
})
.join('');
return formatted;
};
// Custom format for console output
const consoleFormat = printf(({ level, message, timestamp, operationId, context, ...metadata }) => {
const ts = typeof timestamp === 'string' ? new Date(timestamp) : timestamp;
const timeStr = ts instanceof Date ? ts.toLocaleTimeString() : String(ts);
const op = operationId || currentOperationId || 'no-op-id';
const ctx = formatContext(context);
const meta = Object.keys(metadata).length > 0 ? `\n metadata: ${JSON.stringify(metadata, null, 2)}` : '';
return `[${timeStr}] ${level.padEnd(5)} [${op}] ${message}${ctx}${meta}`;
});
// Create the logger instance
const logger = winston_1.default.createLogger({
level: process.env.LOG_LEVEL || 'info',
format: combine(timestamp(), colorize({ all: true }), consoleFormat),
transports: [
new winston_1.default.transports.Console()
],
exitOnError: false
});
exports.Logger = {
startOperation: () => {
currentOperationId = (0, uuid_1.v4)();
return currentOperationId;
},
endOperation: () => {
currentOperationId = null;
},
error: (message, context = {}, meta = {}) => logger.error(message, { context, ...meta }),
warn: (message, context = {}, meta = {}) => logger.warn(message, { context, ...meta }),
info: (message, context = {}, meta = {}) => logger.info(message, { context, ...meta }),
debug: (message, context = {}, meta = {}) => logger.debug(message, { context, ...meta }),
};
exports.default = exports.Logger;
//# sourceMappingURL=Logger.js.map