mirror of
https://github.com/foxhui/WebAI2API.git
synced 2026-06-16 21:03:59 +08:00
104 lines
2.9 KiB
JavaScript
104 lines
2.9 KiB
JavaScript
import process from 'process';
|
|
|
|
const LEVELS = ['debug', 'info', 'warn', 'error'];
|
|
|
|
// ANSI 颜色代码
|
|
const COLORS = {
|
|
reset: '\x1b[0m',
|
|
red: '\x1b[31m',
|
|
yellow: '\x1b[33m',
|
|
blue: '\x1b[34m',
|
|
white: '\x1b[37m'
|
|
};
|
|
|
|
// 根据日志级别获取颜色
|
|
function getColor(level) {
|
|
switch (level.toLowerCase()) {
|
|
case 'error':
|
|
return COLORS.red;
|
|
case 'warn':
|
|
return COLORS.yellow;
|
|
case 'info':
|
|
return COLORS.white;
|
|
case 'debug':
|
|
return COLORS.blue;
|
|
default:
|
|
return COLORS.reset;
|
|
}
|
|
}
|
|
|
|
function formatTime(date = new Date()) {
|
|
const pad = (n, len = 2) => n.toString().padStart(len, '0');
|
|
const yyyy = date.getFullYear();
|
|
const MM = pad(date.getMonth() + 1);
|
|
const dd = pad(date.getDate());
|
|
const HH = pad(date.getHours());
|
|
const mm = pad(date.getMinutes());
|
|
const ss = pad(date.getSeconds());
|
|
const SSS = pad(date.getMilliseconds(), 3);
|
|
return `${yyyy}-${MM}-${dd} ${HH}:${mm}:${ss}.${SSS}`;
|
|
}
|
|
|
|
let currentLogLevel = (process.env.LOG_LEVEL || 'info').toLowerCase();
|
|
|
|
export function setLogLevel(level) {
|
|
if (level && LEVELS.includes(level.toLowerCase())) {
|
|
currentLogLevel = level.toLowerCase();
|
|
}
|
|
}
|
|
|
|
function shouldLog(level) {
|
|
const targetLevel = level.toLowerCase();
|
|
const envIndex = LEVELS.indexOf(currentLogLevel);
|
|
const targetIndex = LEVELS.indexOf(targetLevel);
|
|
|
|
// If env level is invalid, default to info (index 1)
|
|
const effectiveEnvIndex = envIndex === -1 ? 1 : envIndex;
|
|
|
|
return targetIndex >= effectiveEnvIndex;
|
|
}
|
|
|
|
export function log(level, mod, msg, meta = {}) {
|
|
if (!shouldLog(level)) return;
|
|
|
|
const ts = formatTime();
|
|
const levelTag = level.toUpperCase();
|
|
const base = `${ts} [${levelTag}] [${mod}] ${msg}`;
|
|
|
|
const metaStr = Object.keys(meta).length
|
|
? ' | ' + Object.entries(meta).map(([k, v]) => {
|
|
if (v instanceof Error) {
|
|
return `${k}=${v.message}`;
|
|
}
|
|
if (typeof v === 'object' && v !== null) {
|
|
try {
|
|
return `${k}=${JSON.stringify(v)}`;
|
|
} catch (e) {
|
|
return `${k}=[Circular]`;
|
|
}
|
|
}
|
|
return `${k}=${v}`;
|
|
}).join(' ')
|
|
: '';
|
|
|
|
const line = base + metaStr;
|
|
const color = getColor(level);
|
|
const coloredLine = `${color}${line}${COLORS.reset}`;
|
|
|
|
if (level === 'error') {
|
|
console.error(coloredLine);
|
|
} else if (level === 'warn') {
|
|
console.warn(coloredLine);
|
|
} else {
|
|
console.log(coloredLine);
|
|
}
|
|
}
|
|
|
|
export const logger = {
|
|
debug: (mod, msg, meta) => log('debug', mod, msg, meta),
|
|
info: (mod, msg, meta) => log('info', mod, msg, meta),
|
|
warn: (mod, msg, meta) => log('warn', mod, msg, meta),
|
|
error: (mod, msg, meta) => log('error', mod, msg, meta),
|
|
setLevel: setLogLevel
|
|
};
|