nodejs / src /utils /logger.js
clash-linux's picture
Upload 27 files
146bdba verified
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),
};