专栏名称: 程序员大咖
程序员大咖,努力成就期待着的自己。分享程序员技术文章、程序员工具资源、程序员精选课程、程序员视频教程、程序员热点资讯、程序员学习资料等。
目录
相关文章推荐
VC/PE/MA金融圈  ·  减员严重,大家做好准备吧! ·  17 小时前  
湖北药监  ·  资本市场做好金融“五篇大文章” ·  2 天前  
重庆制造  ·  资本市场做好金融“五篇大文章” ·  2 天前  
国际金融报  ·  汇率股指实时播→ ·  2 天前  
金融早实习  ·  华为2025届校园招聘全球启动 ·  3 天前  
51好读  ›  专栏  ›  程序员大咖

都应该会的前端代码规范 - 日志打印规范

程序员大咖  · 公众号  ·  · 2024-10-13 10:24

正文

架构师大咖
架构师大咖,打造有价值的架构师交流平台。分享架构师干货、教程、课程、资讯。架构师大咖,每日推送。
公众号

在前端开发中,随着项目迭代升级,日志打印逐渐风格不一,合理的日志输出是监控应用状态、调试代码和跟踪用户行为的重要手段。一个好的日志系统能够帮助开发者快速定位问题,提高开发效率。本文将介绍如何在前端项目中制定日志输出规范。

1. 日志等级

首先,我们需要定义不同的日志等级,以便根据消息的重要性进行分类。通常,日志等级从低到高可以分为以下几类:

  • DEBUG: 详细的开发时信息,用于调试应用。
  • INFO: 重要事件的简要信息,如系统启动、配置等。
  • WARN: 系统能正常运行,但有潜在错误的情况。
  • ERROR: 由于严重的问题,某些功能无法正常运行。
  • FATAL: 非常严重的问题,可能导致系统崩溃。

2. 日志内容

日志内容应该包含足够的信息,以便于开发者理解发生了什么。一个完整的日志消息通常包括:

  • 时间戳:精确到毫秒的事件发生时间。
  • 日志等级:当前日志消息的等级。
  • 消息内容:描述事件的详细信息。
  • 错误堆栈:如果是错误,提供错误堆栈信息。

3. 日志格式

日志的格式应该统一,以便于阅读和解析。一个常见的日志格式如下:


[时间戳] [日志等级] [消息内容] [错误堆栈]


例如:


[2024-04-01T12:00:00.000Z] [ERROR] Failed to load user data. {stack}


4. 日志输出

在前端项目中,我们通常使用console对象进行日志输出。不同的日志等级可以使用不同的console方法:

  • console.debug用于DEBUG级别。
  • console.info用于INFO级别。
  • console.warn用于WARN级别。
  • console.error用于ERROR和FATAL级别。

5. 日志封装

为了更好地控制日志输出,我们可以封装一个日志工具,来统一管理日志输出。以下是一个简单的日志工具实现:


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);
}
}

// 使用示例
Logger.info( 'Application is starting...' );
Logger.error( 'Failed to load user data' , new Error( 'Network Error' ));


6. 日志收集

在生产环境中,我们可能需要将日志发送到后端服务器进行收集和分析。这可以通过AJAX请求或专门的日志服务来实现。例如,我们可以修改Logger工具,添加一个方法来发送日志:


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. 日志等级控制

在开发环境中,我们可能希望看到尽可能多的日志输出,以便更好地调试应用。但在生产环境中,为了避免性能损耗和过多的日志信息,我们可能只希望输出 WARN 和以上等级的日志。我们可以在 Logger 中添加一个等级控制:


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






请到「今天看啥」查看全文


推荐文章
VC/PE/MA金融圈  ·  减员严重,大家做好准备吧!
17 小时前
湖北药监  ·  资本市场做好金融“五篇大文章”
2 天前
重庆制造  ·  资本市场做好金融“五篇大文章”
2 天前
国际金融报  ·  汇率股指实时播→
2 天前
金融早实习  ·  华为2025届校园招聘全球启动
3 天前
饥饿英语  ·  4月29日这篇文章有可能复议成功
7 年前
房地产采购经理人家园  ·  解读和运用战略采购
7 年前