70 lines
1.8 KiB
JavaScript
70 lines
1.8 KiB
JavaScript
|
|
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;
|