Files

70 lines
1.8 KiB
JavaScript
Raw Permalink Normal View History

2025-12-19 20:44:46 -06:00
const winston = require("winston");
const path = require("path");
require("dotenv").config();
// Define log format
const logFormat = winston.format.combine(
winston.format.timestamp({ format: "YYYY-MM-DD HH:mm:ss" }),
winston.format.errors({ stack: true }),
winston.format.splat(),
winston.format.json()
);
// Console format for development
const consoleFormat = winston.format.combine(
winston.format.colorize(),
winston.format.timestamp({ format: "YYYY-MM-DD HH:mm:ss" }),
winston.format.printf(({ timestamp, level, message, ...meta }) => {
let msg = `${timestamp} [${level}]: ${message}`;
if (Object.keys(meta).length > 0) {
msg += ` ${JSON.stringify(meta)}`;
}
return msg;
})
);
// Create logs directory if it doesn't exist
const fs = require("fs");
const logsDir = path.join(__dirname, "..", "logs");
if (!fs.existsSync(logsDir)) {
fs.mkdirSync(logsDir, { recursive: true });
}
// Create logger instance
const logger = winston.createLogger({
level: process.env.LOG_LEVEL || "info",
format: logFormat,
defaultMeta: { service: "skyartshop" },
transports: [
// Error logs
new winston.transports.File({
filename: path.join(logsDir, "error.log"),
level: "error",
maxsize: 10485760, // 10MB
maxFiles: 5,
}),
// Combined logs
new winston.transports.File({
filename: path.join(logsDir, "combined.log"),
maxsize: 10485760, // 10MB
maxFiles: 5,
}),
],
});
// Add console transport in non-production
if (process.env.NODE_ENV !== "production") {
logger.add(
new winston.transports.Console({
format: consoleFormat,
})
);
}
// Create a stream for Morgan HTTP logger
logger.stream = {
write: (message) => logger.info(message.trim()),
};
module.exports = logger;