ClientX/_src/logger.js

88 lines
3.1 KiB
JavaScript
Raw Permalink Normal View History

2025-04-25 21:27:00 -04:00
import fs from 'fs';
import path from 'path';
import { fileURLToPath } from 'url';
2025-05-08 01:52:12 +00:00
import winston from 'winston';
import 'winston-daily-rotate-file';
2025-04-25 21:27:00 -04:00
const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);
const rootDir = path.dirname(__dirname);
// Create Winston logger
export const createLogger = (clientConfig) => {
2025-05-08 01:52:12 +00:00
const { logging } = clientConfig;
const transports = [];
2025-04-25 21:27:00 -04:00
2025-05-08 01:52:12 +00:00
// Console transport
if (logging.console.enabled) {
transports.push(new winston.transports.Console({
level: logging.console.level,
format: winston.format.combine(
winston.format.timestamp({
format: logging.file.timestampFormat
}),
logging.console.colorize ? winston.format.colorize() : winston.format.uncolorize(),
winston.format.printf(info => `[${info.timestamp}] [${clientConfig.id}] [${info.level}] ${info.message}`)
)
}));
}
2025-04-25 21:27:00 -04:00
2025-05-08 01:52:12 +00:00
// Combined file transport with rotation
if (logging.file.combined.enabled) {
const logDir = path.join(rootDir, logging.file.combined.location);
2025-04-25 21:27:00 -04:00
2025-05-08 01:52:12 +00:00
// Create log directory if it doesn't exist
if (!fs.existsSync(logDir)) {
fs.mkdirSync(logDir, { recursive: true });
}
2025-04-25 21:27:00 -04:00
2025-05-08 01:52:12 +00:00
const combinedTransport = new winston.transports.DailyRotateFile({
filename: path.join(logDir, `${clientConfig.id}-combined-%DATE%.log`),
datePattern: logging.file.dateFormat,
level: logging.file.combined.level,
maxSize: logging.file.combined.maxSize,
maxFiles: logging.file.combined.maxFiles,
format: winston.format.combine(
winston.format.timestamp({
format: logging.file.timestampFormat
}),
winston.format.printf(info => `[${info.timestamp}] [${info.level}] ${info.message}`)
)
});
2025-04-25 21:27:00 -04:00
2025-05-08 01:52:12 +00:00
transports.push(combinedTransport);
}
2025-04-25 21:27:00 -04:00
2025-05-08 01:52:12 +00:00
// Error file transport with rotation
if (logging.file.error.enabled) {
const logDir = path.join(rootDir, logging.file.error.location);
2025-04-25 21:27:00 -04:00
2025-05-08 01:52:12 +00:00
// Create log directory if it doesn't exist
if (!fs.existsSync(logDir)) {
fs.mkdirSync(logDir, { recursive: true });
}
2025-04-25 21:27:00 -04:00
2025-05-08 01:52:12 +00:00
const errorTransport = new winston.transports.DailyRotateFile({
filename: path.join(logDir, `${clientConfig.id}-error-%DATE%.log`),
datePattern: logging.file.dateFormat,
level: logging.file.error.level,
maxSize: logging.file.error.maxSize,
maxFiles: logging.file.error.maxFiles,
format: winston.format.combine(
winston.format.timestamp({
format: logging.file.timestampFormat
}),
winston.format.printf(info => `[${info.timestamp}] [${info.level}] ${info.message}`)
)
});
2025-04-25 21:27:00 -04:00
2025-05-08 01:52:12 +00:00
transports.push(errorTransport);
}
2025-04-25 21:27:00 -04:00
2025-05-08 01:52:12 +00:00
return winston.createLogger({
levels: winston.config.npm.levels,
transports
});
2025-04-25 21:27:00 -04:00
};