Spaces:
Running
Running
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), | |
}; | |