/**
* Structured logging utility
*
* CRITICAL: All logs must go to stderr, NEVER stdout
* stdout is reserved for MCP JSON-RPC protocol
*/
import winston from 'winston';
const logLevel = process.env.LOG_LEVEL || 'info';
export const logger = winston.createLogger({
level: logLevel,
format: winston.format.combine(
winston.format.timestamp(),
winston.format.errors({ stack: true }),
winston.format.json()
),
transports: [
new winston.transports.Console({
stderrLevels: ['error', 'warn', 'info', 'debug'],
consoleWarnLevels: [],
}),
],
});
/**
* Log to stderr only (safe for MCP protocol)
*/
export function logError(message: string, meta?: any): void {
logger.error(message, meta);
}
export function logInfo(message: string, meta?: any): void {
logger.info(message, meta);
}
export function logDebug(message: string, meta?: any): void {
logger.debug(message, meta);
}
export function logWarn(message: string, meta?: any): void {
logger.warn(message, meta);
}