FATAL: 非常严重的问题,可能导致系统崩溃。
错误堆栈:如果是错误,提供错误堆栈信息。
[2024-04-01T12:00:00.000Z] [ERROR] Failed to load user data. {stack}
console.error用于ERROR和FATAL级别。
class Logger { static log(level, message, error) { const timestamp = new Date().toISOString(); const stack = error ? error.stack : ''; const formattedMessage = `[${timestamp}] [${level}] ${message} ${stack}`; switch (level) { case 'DEBUG': console.debug(formattedMessage); break; case 'INFO': console.info(formattedMessage); break; case 'WARN': console.warn(formattedMessage); break; case 'ERROR': case 'FATAL': console.error(formattedMessage); break; default: console.log(formattedMessage); } } static debug(message) { this.log('DEBUG', message); } static info(message) { this.log('INFO', message); } static warn(message) { this.log('WARN', message); } static error(message, error) { this.log('ERROR', message, error); } static fatal(message, error) { this.log('FATAL', message, error); } } // 堆代码 duidaima.com // 使用示例 Logger.info('Application is starting...'); Logger.error('Failed to load user data', new Error('Network Error'));6. 日志收集
class Logger { // ...其他方法 // 根据环境变量判断是否发送日志到后端 if (process.env.NODE_ENV === 'production') { this.sendLog(formattedMessage); } static sendLog(message) { // 假设我们有一个日志收集的API const logEndpoint = '/api/logs'; fetch(logEndpoint, { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify({ message }), }).catch((error) => { console.error('Failed to send log', error); }); }7. 日志等级控制
class Logger { static level = 'DEBUG'; // 默认为DEBUG级别 static setLevel(newLevel) { this.level = newLevel; } static shouldLog(level) { const levels = ['DEBUG', 'INFO', 'WARN', 'ERROR', 'FATAL']; return levels.indexOf(level) >= levels.indexOf(this.level); } static log(level, message, error) { if (!this.shouldLog(level)) { return; } // ...日志输出逻辑 } // ...其他方法 } // 生产环境中设置日志等级 if (process.env.NODE_ENV === 'production') { Logger.setLevel('WARN'); } // 使用示例 Logger.debug('This will not be logged in production'); Logger.warn('This will be logged in production');8. 日志格式化
class Logger { // ...其他方法 static formatStack(stack) { if (!stack) return ''; // 格式化错误堆栈的逻辑 return stack.split('\n').map(line => ` at ${line}`).join('\n'); } static log(level, message, error) { // ...日志输出逻辑 // 格式化错误堆栈 if (error) { formattedMessage += `\n${this.formatStack(error.stack)}`; } // ...输出逻辑 } // ...其他方法 }最后