multi-lane-manager
Version:
Nacos 泳道管理与请求路由组件
83 lines (72 loc) • 2.66 kB
text/typescript
import { createConsola } from 'consola';
import type { ConsolaInstance, LogLevel } from 'consola';
import { DEFAULT_LOG_LEVEL } from './defaults';
/**
* 日志级别映射
* 将字符串日志级别映射到数字级别
*/
const LOG_LEVELS: Record<string, LogLevel> = {
'silent': 0, // 不输出任何日志
'fatal': 1, // 只输出致命错误
'error': 2, // 输出错误信息
'warn': 3, // 输出警告和错误信息
'info': 4, // 输出重要信息、警告和错误(默认级别)
'success': 4, // 与 info 同级
'debug': 5, // 输出调试信息和 info 级别以上的日志
'trace': 6, // 输出跟踪信息和 debug 级别以上的日志
'verbose': 6 // 与 trace 同级
};
/**
* 日志管理器配置接口
* 定义创建日志管理器时可以设置的选项
*/
export interface LoggerOptions {
prefix?: string; // 日志前缀
level?: LogLevel | string; // 日志级别
timestamps?: boolean; // 是否显示时间戳
mockFn?: (...args: any[]) => void; // 用于测试的模拟函数
}
/**
* 创建一个日志管理器实例
* @param options 日志管理器配置选项
* @returns 配置好的 Consola 实例
*/
export function createLogger(options: LoggerOptions = {}): ConsolaInstance {
// 从环境变量获取日志级别,使用默认值
const envLogLevel = process.env.LOG_LEVEL || process.env.LANE_LOG_LEVEL || DEFAULT_LOG_LEVEL;
// 确定最终日志级别
let level: LogLevel = 4; // 默认为 info 级别
if (typeof options.level === 'number') {
// 如果直接提供了数字级别
level = options.level;
} else if (typeof options.level === 'string' && LOG_LEVELS[options.level.toLowerCase()] !== undefined) {
// 如果提供了字符串级别并且它在映射中存在
level = LOG_LEVELS[options.level.toLowerCase()];
} else if (LOG_LEVELS[envLogLevel.toLowerCase()] !== undefined) {
// 如果环境变量中的级别在映射中存在
level = LOG_LEVELS[envLogLevel.toLowerCase()];
}
// 创建 consola 实例
const logger = createConsola({
level,
formatOptions: {
date: options.timestamps !== false, // 默认显示时间戳
colors: true, // 启用颜色
},
});
// 如果提供了前缀,创建一个带前缀的 logger
if (options.prefix) {
return logger.withTag(options.prefix);
}
return logger;
}
/**
* 默认日志管理器实例
* 使用 '泳道管理' 作为前缀
*/
export const logger = createLogger({ prefix: '泳道管理' });
/**
* 导出日志级别常量
* 可以用于设置日志级别
*/
export const LogLevels = LOG_LEVELS;