UNPKG

@dynemcp/dynemcp

Version:

Official DyneMCP framework for creating robust, secure, and scalable MCP servers in TypeScript.

103 lines (94 loc) 2.41 kB
import chalk from 'chalk' import pino from 'pino' import { join } from 'path' import { existsSync, mkdirSync } from 'fs' // Logger utilities for DyneMCP CLI // Provides ConsoleLogger and StderrLogger for colored and error stream logging. // Logger interface for consistent logging methods export interface Logger { log(message: string): void warn(message: string): void error(message: string): void info(message: string): void success(message: string): void debug(message: string): void } // ConsoleLogger: logs to stdout with colors export class ConsoleLogger implements Logger { log(message: string) { console.log(message) } warn(message: string) { console.warn(chalk.yellow(message)) } error(message: string) { console.error(chalk.red(message)) } info(message: string) { console.info(chalk.blue(message)) } success(message: string) { console.log(chalk.green(message)) } debug(message: string) { console.debug(chalk.gray(message)) } } // StderrLogger: logs to stderr with colors export class StderrLogger implements Logger { log(message: string) { console.error(message) } warn(message: string) { console.error(chalk.yellow(message)) } error(message: string) { console.error(chalk.red(message)) } info(message: string) { console.error(chalk.blue(message)) } success(message: string) { console.error(chalk.green(message)) } debug(message: string) { console.error(chalk.gray(message)) } } // FileLogger: logs to file using Pino export class FileLogger implements Logger { private logger: pino.Logger constructor() { const logDir = join(process.cwd(), 'logs') if (!existsSync(logDir)) { mkdirSync(logDir, { recursive: true }) } const date = new Date().toISOString().slice(0, 10) // YYYY-MM-DD const logFile = join(logDir, `${date}.log`) this.logger = pino( { level: 'info', }, pino.destination(logFile) ) } log(message: string) { this.logger.info(message) } warn(message: string) { this.logger.warn(message) } error(message: string) { this.logger.error(message) } info(message: string) { this.logger.info(message) } success(message: string) { this.logger.info(`[SUCCESS] ${message}`) } debug(message: string) { this.logger.debug(message) } } export const fileLogger = new FileLogger()