Files
memory-manager-concurrent/src/core/logger.js
user e78cd230d9 feat: 优化进度条体验和修复一键全选功能
- 进度条改用检查点驱动模拟真实流式传输进度 (5→15→25→35→45→60→75→85→92→100)
- 每个检查点间使用 ease-out 缓动平滑过渡
- 完成时从当前进度平滑动画到 100%
- 修复一键全选按钮事件绑定问题
- 添加调试日志帮助诊断问题
- 修复 addSystemMessage 使用不存在容器的问题

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2026-02-04 19:25:39 +08:00

266 lines
6.8 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/**
* 日志工具模块
* @module core/logger
*/
// 日志配置缓存
let logConfigCache = null;
let configModule = null;
// 使用 ES 模块的动态导入
async function loadConfigModule() {
if (!configModule) {
try {
configModule = await import("@config/config-manager");
} catch (e) {
console.error("[记忆管理并发系统] 无法加载配置模块:", e);
}
}
return configModule;
}
function getGlobalSettings() {
// 先尝试从缓存获取
if (logConfigCache) {
return logConfigCache;
}
// 尝试直接获取配置(适用于模块已加载的情况)
try {
// 避免循环依赖,直接从全局对象获取
if (
typeof window !== "undefined" &&
window.MemoryManagerConcurrent &&
window.MemoryManagerConcurrent.getSettings
) {
const settings = window.MemoryManagerConcurrent.getSettings();
logConfigCache = settings;
return settings;
}
} catch (e) {
// 忽略错误
}
// 返回默认值
return { showLogs: true }; // 默认显示日志,方便调试
}
// 系统前缀
const SYSTEM_PREFIX = "[记忆管理并发系统]";
// 当前活跃的日志组
let activeGroups = [];
/**
* 日志工具对象
*/
const Logger = {
prefix: SYSTEM_PREFIX,
/**
* 检查是否应该显示日志
* @returns {boolean}
*/
shouldShowLogs: () => {
// 总是返回 true确保所有日志都能显示
return true;
},
/**
* 构建完整的日志前缀
* @param {string} [module] 模块名称
* @returns {string} 完整前缀
*/
buildPrefix: (module) => {
if (module) {
return `${SYSTEM_PREFIX}-[${module}]`;
}
return SYSTEM_PREFIX;
},
/**
* 普通日志(受 showLogs 控制)
* @param {...any} args 日志参数
*/
log: (...args) => {
if (Logger.shouldShowLogs()) {
console.log(Logger.prefix, ...args);
}
},
/**
* 调试日志(受 showLogs 控制)
* 注意:使用 console.log 而非 console.debug确保在所有浏览器设置下可见
* @param {...any} args 日志参数
*/
debug: (...args) => {
if (Logger.shouldShowLogs()) {
console.log(Logger.prefix, "[DEBUG]", ...args);
}
},
/**
* 警告日志(受 showLogs 控制)
* @param {...any} args 日志参数
*/
warn: (...args) => {
if (Logger.shouldShowLogs()) {
console.warn(Logger.prefix, ...args);
}
},
/**
* 错误日志(总是输出)
* @param {...any} args 日志参数
*/
error: (...args) => {
console.error(Logger.prefix, ...args);
},
/**
* 信息日志(总是输出,用于重要信息)
* @param {...any} args 日志参数
*/
info: (...args) => {
console.info(Logger.prefix, ...args);
},
// ==================== 日志分组功能 ====================
/**
* 开始一个日志组(展开状态)
* @param {string} module 模块名称
* @param {string} [label] 组标签
*/
group: (module, label) => {
if (!Logger.shouldShowLogs()) return;
const prefix = Logger.buildPrefix(module);
const groupLabel = label ? `${prefix} ${label}` : prefix;
console.group(groupLabel);
activeGroups.push(groupLabel);
},
/**
* 开始一个折叠的日志组
* @param {string} module 模块名称
* @param {string} [label] 组标签
*/
groupCollapsed: (module, label) => {
if (!Logger.shouldShowLogs()) return;
const prefix = Logger.buildPrefix(module);
const groupLabel = label ? `${prefix} ${label}` : prefix;
console.groupCollapsed(groupLabel);
activeGroups.push(groupLabel);
},
/**
* 结束当前日志组
*/
groupEnd: () => {
if (!Logger.shouldShowLogs()) return;
if (activeGroups.length > 0) {
console.groupEnd();
activeGroups.pop();
}
},
/**
* 结束所有日志组
*/
groupEndAll: () => {
if (!Logger.shouldShowLogs()) return;
while (activeGroups.length > 0) {
console.groupEnd();
activeGroups.pop();
}
},
// ==================== 模块化日志工具 ====================
/**
* 创建一个带模块名的日志记录器
* @param {string} module 模块名称
* @returns {object} 日志记录器对象
*/
createModuleLogger: (module) => {
const modulePrefix = Logger.buildPrefix(module);
return {
prefix: modulePrefix,
log: (...args) => {
if (Logger.shouldShowLogs()) {
console.log(modulePrefix, ...args);
}
},
debug: (...args) => {
if (Logger.shouldShowLogs()) {
console.log(modulePrefix, "[DEBUG]", ...args);
}
},
warn: (...args) => {
if (Logger.shouldShowLogs()) {
console.warn(modulePrefix, ...args);
}
},
error: (...args) => {
console.error(modulePrefix, ...args);
},
info: (...args) => {
console.info(modulePrefix, ...args);
},
/**
* 开始一个日志组
* @param {string} [label] 组标签
*/
group: (label) => {
Logger.group(module, label);
},
/**
* 开始一个折叠的日志组
* @param {string} [label] 组标签
*/
groupCollapsed: (label) => {
Logger.groupCollapsed(module, label);
},
/**
* 结束当前日志组
*/
groupEnd: () => {
Logger.groupEnd();
},
/**
* 执行带分组的操作
* @param {string} label 组标签
* @param {Function} fn 要执行的函数
* @param {boolean} [collapsed=true] 是否折叠
*/
withGroup: async (label, fn, collapsed = true) => {
if (!Logger.shouldShowLogs()) {
return await fn();
}
if (collapsed) {
Logger.groupCollapsed(module, label);
} else {
Logger.group(module, label);
}
try {
return await fn();
} finally {
Logger.groupEnd();
}
},
};
},
};
export default Logger;