feat: logger.js - 添加日志级别控制
This commit is contained in:
@@ -7,6 +7,34 @@ const isDevelopment =
|
|||||||
process.env.NODE_ENV === 'development' ||
|
process.env.NODE_ENV === 'development' ||
|
||||||
process.env.REACT_APP_ENABLE_DEBUG === 'true';
|
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 LOG_THROTTLE_TIME = 1000; // 1秒内相同日志只输出一次
|
||||||
const recentLogs = new Map(); // 日志缓存,用于去重
|
const recentLogs = new Map(); // 日志缓存,用于去重
|
||||||
@@ -148,13 +176,13 @@ export const logger = {
|
|||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 调试日志(仅开发环境)
|
* 调试日志(仅开发环境 + LOG_LEVEL=debug)
|
||||||
* @param {string} component - 组件名称
|
* @param {string} component - 组件名称
|
||||||
* @param {string} message - 调试信息
|
* @param {string} message - 调试信息
|
||||||
* @param {object} data - 相关数据(可选)
|
* @param {object} data - 相关数据(可选)
|
||||||
*/
|
*/
|
||||||
debug: (component, message, data = {}) => {
|
debug: (component, message, data = {}) => {
|
||||||
if (isDevelopment && shouldLog(component, message)) {
|
if (isDevelopment && shouldLogLevel('debug') && shouldLog(component, message)) {
|
||||||
console.group(`🐛 Debug: ${component}`);
|
console.group(`🐛 Debug: ${component}`);
|
||||||
console.log('Message:', message);
|
console.log('Message:', message);
|
||||||
if (Object.keys(data).length > 0) {
|
if (Object.keys(data).length > 0) {
|
||||||
@@ -166,13 +194,13 @@ export const logger = {
|
|||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 信息日志(仅开发环境)
|
* 信息日志(仅开发环境 + LOG_LEVEL>=info)
|
||||||
* @param {string} component - 组件名称
|
* @param {string} component - 组件名称
|
||||||
* @param {string} message - 信息内容
|
* @param {string} message - 信息内容
|
||||||
* @param {object} data - 相关数据(可选)
|
* @param {object} data - 相关数据(可选)
|
||||||
*/
|
*/
|
||||||
info: (component, message, data = {}) => {
|
info: (component, message, data = {}) => {
|
||||||
if (isDevelopment && shouldLog(component, message)) {
|
if (isDevelopment && shouldLogLevel('info') && shouldLog(component, message)) {
|
||||||
console.group(`ℹ️ Info: ${component}`);
|
console.group(`ℹ️ Info: ${component}`);
|
||||||
console.log('Message:', message);
|
console.log('Message:', message);
|
||||||
if (Object.keys(data).length > 0) {
|
if (Object.keys(data).length > 0) {
|
||||||
@@ -181,6 +209,28 @@ export const logger = {
|
|||||||
console.log('Timestamp:', new Date().toISOString());
|
console.log('Timestamp:', new Date().toISOString());
|
||||||
console.groupEnd();
|
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';
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user