审查视图

app/mcp/logger.ts 1.4 KB
202304001 authored
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
// ANSI color codes for terminal output
const colors = {
  reset: "\x1b[0m",
  bright: "\x1b[1m",
  dim: "\x1b[2m",
  green: "\x1b[32m",
  yellow: "\x1b[33m",
  red: "\x1b[31m",
  blue: "\x1b[34m",
};

export class MCPClientLogger {
  private readonly prefix: string;
  private readonly debugMode: boolean;

  constructor(
    prefix: string = "NextChat MCP Client",
    debugMode: boolean = false,
  ) {
    this.prefix = prefix;
    this.debugMode = debugMode;
  }

  info(message: any) {
    this.print(colors.blue, message);
  }

  success(message: any) {
    this.print(colors.green, message);
  }

  error(message: any) {
    this.print(colors.red, message);
  }

  warn(message: any) {
    this.print(colors.yellow, message);
  }

  debug(message: any) {
    if (this.debugMode) {
      this.print(colors.dim, message);
    }
  }

  /**
   * Format message to string, if message is object, convert to JSON string
   */
  private formatMessage(message: any): string {
    return typeof message === "object"
      ? JSON.stringify(message, null, 2)
      : message;
  }

  /**
   * Print formatted message to console
   */
  private print(color: string, message: any) {
    const formattedMessage = this.formatMessage(message);
    const logMessage = `${color}${colors.bright}[${this.prefix}]${colors.reset} ${formattedMessage}`;

    // 只使用 console.log,这样日志会显示在 Tauri 的终端中
    console.log(logMessage);
  }
}