闽公网安备 35020302035485号
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)}`;
}
// ...输出逻辑
}
// ...其他方法
}
最后