From 64f8914951d6f161a24fd715152fcd75c65ffabf Mon Sep 17 00:00:00 2001 From: zdl <3489966805@qq.com> Date: Wed, 26 Nov 2025 15:30:31 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20logger.js=20-=20=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E6=97=A5=E5=BF=97=E7=BA=A7=E5=88=AB=E6=8E=A7=E5=88=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/utils/logger.js | 58 +++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 54 insertions(+), 4 deletions(-) diff --git a/src/utils/logger.js b/src/utils/logger.js index 44c1090b..c8cd5b47 100644 --- a/src/utils/logger.js +++ b/src/utils/logger.js @@ -7,6 +7,34 @@ const isDevelopment = process.env.NODE_ENV === 'development' || process.env.REACT_APP_ENABLE_DEBUG === 'true'; +// ========== 日志级别配置 ========== +// 日志级别:error < warn < info < debug +// 默认级别:warn(只显示警告和错误) +// 可通过 localStorage.setItem('LOG_LEVEL', 'debug') 开启详细日志 +const LOG_LEVELS = { + error: 0, + warn: 1, + info: 2, + debug: 3, +}; + +// 从 localStorage 读取日志级别(允许用户临时开启详细日志) +const getLogLevel = () => { + if (typeof window !== 'undefined' && window.localStorage) { + const level = localStorage.getItem('LOG_LEVEL'); + if (level && LOG_LEVELS[level] !== undefined) { + return LOG_LEVELS[level]; + } + } + // 默认只显示 warn 和 error + return LOG_LEVELS.warn; +}; + +// 检查是否应该输出指定级别的日志 +const shouldLogLevel = (level) => { + return LOG_LEVELS[level] <= getLogLevel(); +}; + // ========== 日志限流配置 ========== const LOG_THROTTLE_TIME = 1000; // 1秒内相同日志只输出一次 const recentLogs = new Map(); // 日志缓存,用于去重 @@ -148,13 +176,13 @@ export const logger = { }, /** - * 调试日志(仅开发环境) + * 调试日志(仅开发环境 + LOG_LEVEL=debug) * @param {string} component - 组件名称 * @param {string} message - 调试信息 * @param {object} data - 相关数据(可选) */ debug: (component, message, data = {}) => { - if (isDevelopment && shouldLog(component, message)) { + if (isDevelopment && shouldLogLevel('debug') && shouldLog(component, message)) { console.group(`🐛 Debug: ${component}`); console.log('Message:', message); if (Object.keys(data).length > 0) { @@ -166,13 +194,13 @@ export const logger = { }, /** - * 信息日志(仅开发环境) + * 信息日志(仅开发环境 + LOG_LEVEL>=info) * @param {string} component - 组件名称 * @param {string} message - 信息内容 * @param {object} data - 相关数据(可选) */ info: (component, message, data = {}) => { - if (isDevelopment && shouldLog(component, message)) { + if (isDevelopment && shouldLogLevel('info') && shouldLog(component, message)) { console.group(`ℹ️ Info: ${component}`); console.log('Message:', message); if (Object.keys(data).length > 0) { @@ -181,6 +209,28 @@ export const logger = { console.log('Timestamp:', new Date().toISOString()); console.groupEnd(); } + }, + + /** + * 设置日志级别(方便调试) + * @param {string} level - 日志级别 ('error' | 'warn' | 'info' | 'debug') + */ + setLevel: (level) => { + if (LOG_LEVELS[level] !== undefined) { + localStorage.setItem('LOG_LEVEL', level); + console.log(`[Logger] 日志级别已设置为: ${level}`); + console.log(`[Logger] 可用级别: error < warn < info < debug`); + } else { + console.error(`[Logger] 无效的日志级别: ${level}`); + } + }, + + /** + * 获取当前日志级别 + */ + getLevel: () => { + const levelNum = getLogLevel(); + return Object.keys(LOG_LEVELS).find(key => LOG_LEVELS[key] === levelNum) || 'warn'; } };