postgres-mcp-tools
Version:
PostgreSQL-based memory system with vector search capabilities for AI applications, including MCP integration for Claude
87 lines (76 loc) • 1.86 kB
text/typescript
import winston from 'winston';
import dotenv from 'dotenv';
// Load environment variables
dotenv.config();
// Define log levels
const levels = {
error: 0,
warn: 1,
info: 2,
http: 3,
debug: 4,
};
// Define log level based on environment
const level = () => {
const env = process.env.NODE_ENV || 'development';
const isDevelopment = env === 'development';
return isDevelopment ? 'debug' : process.env.LOG_LEVEL || 'info';
};
// Define log colors
const colors = {
error: 'red',
warn: 'yellow',
info: 'green',
http: 'magenta',
debug: 'blue',
};
// Add colors to winston
winston.addColors(colors);
// Create custom format
const format = winston.format.combine(
winston.format.timestamp({ format: 'YYYY-MM-DD HH:mm:ss:ms' }),
winston.format.printf(
(info) => `${info.timestamp} ${info.level}: ${info.message}`,
),
);
// Define transport array based on environment
const transports = [
new winston.transports.Console({
format: winston.format.combine(
winston.format.colorize({ all: true }),
winston.format.printf(
(info) => `${info.timestamp} ${info.level}: ${info.message}`,
),
),
// Force all log levels to stderr
stderrLevels: Object.keys(levels),
}),
];
// Add file transport in production
const fileTransports = [];
if (process.env.NODE_ENV === 'production') {
fileTransports.push(
new winston.transports.File({
filename: 'logs/error.log',
level: 'error',
maxsize: 5242880, // 5MB
maxFiles: 5,
}),
new winston.transports.File({
filename: 'logs/combined.log',
maxsize: 5242880, // 5MB
maxFiles: 5,
}),
);
}
// Create the logger instance
export const logger = winston.createLogger({
level: level(),
levels,
format,
transports: [
...transports,
...fileTransports
],
});
export default logger;