chess-mcp
Version:
Chess MCP server with position evaluation, move validation, and masters database
51 lines • 1.74 kB
JavaScript
import { createLogger, format, transports } from 'winston';
import path from 'path';
import fs from 'fs';
// Initialize with console transport as fallback
const loggerConfig = {
level: 'info',
format: format.combine(format.timestamp({
format: 'YYYY-MM-DD HH:mm:ss'
}), format.errors({ stack: true }), format.splat(), format.json()),
defaultMeta: { service: 'chess-mcp' },
transports: []
};
// Try to set up file transports if we have file system access
try {
const logsDir = path.join(process.cwd(), 'logs');
if (!fs.existsSync(logsDir)) {
fs.mkdirSync(logsDir);
}
// Add file transports
loggerConfig.transports.push(new transports.File({
filename: path.join(logsDir, 'error.log'),
level: 'error',
maxsize: 5242880, // 5MB
maxFiles: 5,
}), new transports.File({
filename: path.join(logsDir, 'combined.log'),
maxsize: 5242880, // 5MB
maxFiles: 5,
}));
}
catch (error) {
// If file system access fails, we'll only use console logging
console.warn('Failed to set up file logging, falling back to console only:', error);
}
const logger = createLogger(loggerConfig);
// Add console transport in non-production environments
if (process.env.NODE_ENV !== 'production') {
logger.add(new transports.Console({
format: format.combine(format.colorize(), format.simple())
}));
}
else {
// In production, if we have no file transports, add console transport as fallback
if (loggerConfig.transports.length === 0) {
logger.add(new transports.Console({
format: format.combine(format.colorize(), format.simple())
}));
}
}
export default logger;
//# sourceMappingURL=logger.js.map