logger.ts 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. // ANSI color codes for terminal output
  2. const colors = {
  3. reset: "\x1b[0m",
  4. bright: "\x1b[1m",
  5. dim: "\x1b[2m",
  6. green: "\x1b[32m",
  7. yellow: "\x1b[33m",
  8. red: "\x1b[31m",
  9. blue: "\x1b[34m",
  10. };
  11. export class MCPClientLogger {
  12. private readonly prefix: string;
  13. private readonly debugMode: boolean;
  14. constructor(
  15. prefix: string = "NextChat MCP Client",
  16. debugMode: boolean = false,
  17. ) {
  18. this.prefix = prefix;
  19. this.debugMode = debugMode;
  20. }
  21. info(message: any) {
  22. this.print(colors.blue, message);
  23. }
  24. success(message: any) {
  25. this.print(colors.green, message);
  26. }
  27. error(message: any) {
  28. this.print(colors.red, message);
  29. }
  30. warn(message: any) {
  31. this.print(colors.yellow, message);
  32. }
  33. debug(message: any) {
  34. if (this.debugMode) {
  35. this.print(colors.dim, message);
  36. }
  37. }
  38. /**
  39. * Format message to string, if message is object, convert to JSON string
  40. */
  41. private formatMessage(message: any): string {
  42. return typeof message === "object"
  43. ? JSON.stringify(message, null, 2)
  44. : message;
  45. }
  46. /**
  47. * Print formatted message to console
  48. */
  49. private print(color: string, message: any) {
  50. const formattedMessage = this.formatMessage(message);
  51. const logMessage = `${color}${colors.bright}[${this.prefix}]${colors.reset} ${formattedMessage}`;
  52. // 只使用 console.log,这样日志会显示在 Tauri 的终端中
  53. console.log(logMessage);
  54. }
  55. }