/* eslint-disable no-console */ import path from 'path'; import * as winston from 'winston'; import 'winston-daily-rotate-file'; const hformat = winston.format.printf( ({ level, label, message, timestamp, ...metadata }) => { let msg = `${timestamp} [${level}]${ label ? `[${label}]` : '' }: ${message} `; if (Object.keys(metadata).length > 0) { msg += JSON.stringify(metadata); } return msg; } ); const seerrFileTransport = new winston.transports.DailyRotateFile({ filename: process.env.CONFIG_DIRECTORY ? `${process.env.CONFIG_DIRECTORY}/logs/seerr-%DATE%.log` : path.join(__dirname, '../config/logs/seerr-%DATE%.log'), datePattern: 'YYYY-MM-DD', zippedArchive: true, maxSize: '20m', maxFiles: '7d', createSymlink: true, symlinkName: 'seerr.log', }); const machineLogFileTransport = new winston.transports.DailyRotateFile({ filename: process.env.CONFIG_DIRECTORY ? `${process.env.CONFIG_DIRECTORY}/logs/.machinelogs-%DATE%.json` : path.join(__dirname, '../config/logs/.machinelogs-%DATE%.json'), datePattern: 'YYYY-MM-DD', zippedArchive: true, maxSize: '20m', maxFiles: '1d', createSymlink: true, symlinkName: '.machinelogs.json', format: winston.format.combine( winston.format.splat(), winston.format.timestamp(), winston.format.json() ), }); seerrFileTransport.on('error', (err) => { console.error('Error in seerr file transport:', err); }); machineLogFileTransport.on('error', (err) => { console.error('Error in machine log file transport:', err); }); const logger = winston.createLogger({ level: process.env.LOG_LEVEL?.toLowerCase() || 'debug', format: winston.format.combine( winston.format.splat(), winston.format.timestamp(), hformat ), transports: [ new winston.transports.Console({ format: winston.format.combine( winston.format.colorize(), winston.format.splat(), winston.format.timestamp(), hformat ), }), seerrFileTransport, machineLogFileTransport, ], }); export default logger;