UNPKG

@mseep/ableton-copilot-mcp

Version:
90 lines 3.57 kB
import winston from 'winston'; import DailyRotateFile from 'winston-daily-rotate-file'; import path from 'path'; import fs from 'fs'; // Add DailyRotateFile plugin to winston transports const { format } = winston; // Handle DailyRotateFile with type assertion const DailyRotateFileTransport = DailyRotateFile; // Create custom formatter to handle objects and multiple parameters const objectFormat = format((info) => { // If message is an array (multiple parameters), join them if (Array.isArray(info.message)) { info.message = info.message.map(arg => typeof arg === 'object' ? JSON.stringify(arg) : String(arg)).join(' '); } // If message is an object, convert to string else if (typeof info.message === 'object') { info.message = JSON.stringify(info.message); } return info; }); /** * Create a winston logger instance * @param logFilePath Path to the log file * @returns winston.Logger instance */ export function createLogger(logFilePath) { const logDir = path.dirname(logFilePath); const baseName = path.basename(logFilePath, path.extname(logFilePath)); const ext = path.extname(logFilePath); if (!fs.existsSync(logDir)) { fs.mkdirSync(logDir, { recursive: true }); } // Create daily rotate file transport const fileTransport = new DailyRotateFileTransport({ filename: `${logDir}/${baseName}-%DATE%${ext}`, datePattern: 'YYYY-MM-DD', maxSize: '20m', maxFiles: '14d', zippedArchive: true }); // Create error log daily rotate transport const errorFileTransport = new DailyRotateFileTransport({ filename: `${logDir}/${baseName}-error-%DATE%${ext}`, datePattern: 'YYYY-MM-DD', maxSize: '20m', maxFiles: '14d', level: 'error', zippedArchive: true }); const logger = winston.createLogger({ level: 'debug', format: format.combine(objectFormat(), format.timestamp({ format: () => { const now = new Date(); const year = now.getFullYear(); const month = String(now.getMonth() + 1).padStart(2, '0'); const day = String(now.getDate()).padStart(2, '0'); const hours = String(now.getHours()).padStart(2, '0'); const minutes = String(now.getMinutes()).padStart(2, '0'); const seconds = String(now.getSeconds()).padStart(2, '0'); const milliseconds = String(now.getMilliseconds()).padStart(3, '0'); return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}.${milliseconds}`; } }), format.printf(({ level, message, timestamp }) => { return `[${timestamp}] [${level.toUpperCase()}] ${message}`; })), transports: [ fileTransport, errorFileTransport ] }); // Wrap logger methods to handle multiple parameters const enhancedLogger = logger; // Wrap each log level method to support multiple parameters const wrapLogMethod = (method) => { const original = enhancedLogger[method].bind(enhancedLogger); enhancedLogger[method] = function (...args) { if (args.length > 1) { return original(args); } else { return original(args[0]); } }; }; // Wrap all standard log levels ['error', 'warn', 'info', 'debug', 'verbose'].forEach(wrapLogMethod); return enhancedLogger; } //# sourceMappingURL=logger.js.map