File size: 2,337 Bytes
146bdba
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
import chalk from 'chalk';

/**

 * 日志级别枚举

 */
export const LogLevel = {
  DEBUG: 0,
  INFO: 1,
  WARNING: 2,
  ERROR: 3,
  SUCCESS: 4,
};

/**

 * 统一的日志管理器

 */
class Logger {
  constructor(name = 'app') {
    this.name = name;
    this.level = LogLevel.INFO;
  }
  
  setLevel(level) {
    this.level = level;
  }
  
  debug(message) {
    if (this.level <= LogLevel.DEBUG) {
      console.log(chalk.gray(`[debug][${this.name}] ${message}`));
    }
  }
  
  info(message) {
    if (this.level <= LogLevel.INFO) {
      console.log(chalk.blue(`[info][${this.name}] ${message}`));
    }
  }
  
  warning(message) {
    if (this.level <= LogLevel.WARNING) {
      console.warn(chalk.yellow(`[warn][${this.name}] ${message}`));
    }
  }
  
  error(message, error = null) {
    if (this.level <= LogLevel.ERROR) {
      console.error(chalk.red(`[error][${this.name}] ${message}`));
      if (error && error.stack) {
        console.error(chalk.red(error.stack));
      }
    }
  }
  
  success(message) {
    if (this.level <= LogLevel.SUCCESS) {
      console.log(chalk.green(`[success][${this.name}] ${message}`));
    }
  }
  
  request(method, path, status, time) {
    if (this.level <= LogLevel.INFO) {
      const statusColor = status >= 500 ? chalk.red : 
                          status >= 400 ? chalk.yellow : 
                          status >= 300 ? chalk.cyan : 
                          status >= 200 ? chalk.green : chalk.white;
      console.log(`${chalk.magenta(`[${method}]`)} - ${path} ${statusColor(status)} ${chalk.gray(`${time}ms`)}`);
    }
  }
}

// 创建默认日志实例
export const defaultLogger = new Logger();

// 创建具名日志实例的工厂函数
export function createLogger(name) {
  return new Logger(name);
}

// 导出默认方法
export default {
  debug: (message) => defaultLogger.debug(message),
  info: (message) => defaultLogger.info(message),
  warning: (message) => defaultLogger.warning(message),
  error: (message, error) => defaultLogger.error(message, error),
  success: (message) => defaultLogger.success(message),
  request: (method, path, status, time) => defaultLogger.request(method, path, status, time),
  setLevel: (level) => defaultLogger.setLevel(level),
};