UNPKG

perchance-ai-prompt-library

Version:

🎨 Complete AI prompt library and generator with advanced CLI, batch processing, analytics, and multi-format export capabilities

85 lines (75 loc) • 2.21 kB
const winston = require('winston'); const path = require('path'); const { createLogger, format, transports } = winston; const { combine, timestamp, printf, colorize, errors } = format; // Define log format const logFormat = printf(({ level, message, timestamp, stack }) => { return `${timestamp} [${level.toUpperCase()}]: ${stack || message}`; }); // Create logger instance const logger = createLogger({ level: process.env.LOG_LEVEL || 'info', format: combine( timestamp({ format: 'YYYY-MM-DD HH:mm:ss' }), errors({ stack: true }), logFormat ), defaultMeta: { service: 'perchance-ai-prompt-library' }, transports: [ // Console transport new transports.Console({ format: combine( colorize(), timestamp({ format: 'HH:mm:ss' }), printf(({ level, message, timestamp, stack }) => { return `${timestamp} [${level}]: ${stack || message}`; }) ) }), // File transport for errors new transports.File({ filename: path.join('logs', 'error.log'), level: 'error', maxsize: 5242880, // 5MB maxFiles: 5 }), // File transport for all logs new transports.File({ filename: path.join('logs', 'combined.log'), maxsize: 10485760, // 10MB maxFiles: 5 }) ], exceptionHandlers: [ new transports.File({ filename: path.join('logs', 'exceptions.log') }) ], exitOnError: false }); // Create logs directory if it doesn't exist const fs = require('fs'); const logDir = 'logs'; if (!fs.existsSync(logDir)) { fs.mkdirSync(logDir); } // Add a stream for Morgan HTTP logging logger.stream = { write: (message) => { logger.info(message.trim()); } }; // Add a method for API request logging logger.api = (req, res, next) => { const start = Date.now(); res.on('finish', () => { const duration = Date.now() - start; logger.info(`${req.method} ${req.originalUrl} ${res.statusCode} - ${duration}ms`); }); next(); }; // Add a method for debug logging that respects log level logger.debug = (message, meta) => { if (logger.levels[logger.level] >= logger.levels['debug']) { logger.log('debug', message, meta); } }; module.exports = logger;