Team Ai
Apppublic

Stryker-SC/Discord-Bot-VCMaster-JavaScript-Revamped

sourceHugging Faceupdated 2mo agoView on Hugging Face
0likes
logger.js64 linesDownload Raw Back to utils
1const winston = require('winston');2require('winston-daily-rotate-file');3const fs = require('fs');4const path = require('path');5 6// Ensure logs directory exists only if not in production to save disk IO on ephemeral environments7let logDir;8if (process.env.NODE_ENV !== 'production') {9    logDir = path.join(__dirname, '../logs');10    if (!fs.existsSync(logDir)) {11        fs.mkdirSync(logDir);12    }13}14 15const logFormat = winston.format.combine(16    winston.format.timestamp({ format: 'YYYY-MM-DD HH:mm:ss' }),17    winston.format.printf(({ timestamp, level, message, ...meta }) => {18        let metaStr = Object.keys(meta).length ? JSON.stringify(meta) : '';19        return `[${timestamp}] [${level.toUpperCase()}]: ${message} ${metaStr}`;20    })21);22 23const consoleFormat = winston.format.combine(24    winston.format.colorize(),25    winston.format.timestamp({ format: 'YYYY-MM-DD HH:mm:ss' }),26    winston.format.printf(({ timestamp, level, message, ...meta }) => {27        let metaStr = Object.keys(meta).length ? JSON.stringify(meta) : '';28        return `[${timestamp}] [${level}]: ${message} ${metaStr}`;29    })30);31 32const transports = [33    new winston.transports.Console({34        format: consoleFormat35    })36];37 38// Append file transports only in development/local environments39if (process.env.NODE_ENV !== 'production') {40    transports.push(new winston.transports.DailyRotateFile({41        filename: path.join(logDir, 'app-%DATE%.log'),42        datePattern: 'YYYY-MM-DD',43        maxSize: '20m',44        maxFiles: '14d',45        format: logFormat46    }));47 48    transports.push(new winston.transports.DailyRotateFile({49        filename: path.join(logDir, 'error-%DATE%.log'),50        datePattern: 'YYYY-MM-DD',51        level: 'error',52        maxSize: '20m',53        maxFiles: '14d',54        format: logFormat55    }));56}57 58const logger = winston.createLogger({59    level: 'info',60    transports: transports61});62 63module.exports = logger;64