2024-04-30 12:18:18 +05:30
|
|
|
|
import winston from 'winston';
|
|
|
|
|
|
2025-02-02 12:14:15 +02:00
|
|
|
|
const { combine, timestamp, printf, colorize } = winston.format;
|
|
|
|
|
|
|
|
|
|
const logFormat = printf(({ timestamp, level, message }) => {
|
|
|
|
|
return `${timestamp} [${level.toUpperCase()}]: ${message}`;
|
|
|
|
|
});
|
|
|
|
|
|
2024-04-30 12:18:18 +05:30
|
|
|
|
const logger = winston.createLogger({
|
2025-02-02 12:14:15 +02:00
|
|
|
|
level: process.env.LOG_LEVEL || 'info',
|
|
|
|
|
format: combine(
|
|
|
|
|
timestamp({ format: 'YYYY-MM-DD HH:mm:ss' }),
|
|
|
|
|
colorize(), // optional color in dev
|
|
|
|
|
logFormat
|
|
|
|
|
),
|
2024-04-30 12:18:18 +05:30
|
|
|
|
transports: [
|
2025-02-02 12:14:15 +02:00
|
|
|
|
// Console transport ensures Docker sees logs on stdout
|
|
|
|
|
new winston.transports.Console(),
|
|
|
|
|
new winston.transports.File({ filename: 'app.log' }),
|
|
|
|
|
|
|
|
|
|
// Optional: file transport if you also want to persist logs on the container’s filesystem
|
|
|
|
|
// new winston.transports.File({ filename: 'app.log' }),
|
2024-04-30 12:18:18 +05:30
|
|
|
|
],
|
|
|
|
|
});
|
|
|
|
|
|
2025-02-02 12:14:15 +02:00
|
|
|
|
logger.info("✅ Winston logger active, logging to console!");
|
|
|
|
|
|
2024-04-30 12:18:18 +05:30
|
|
|
|
export default logger;
|