引言
在前端开发过程中,控制台日志是我们调试和监控应用的重要工具。然而,默认的 console.log 输出往往缺乏层次感和可读性,尤其是在处理复杂对象和大量日志时。本文将介绍一个名为 prettyLog.js 的工具,它通过彩色样式和结构化输出,大幅提升了控制台日志的可读性和调试效率。
核心功能
prettyLog.js 主要提供了四种类型的日志输出方法:
- info - 用于一般信息的输出(灰色)
- success - 用于成功信息的输出(绿色)
- warning - 用于警告信息的输出(橙色)
- error - 用于错误信息的输出(红色)
每种方法都支持两种调用方式:
- 单参数模式: prettyLog.info('这是一条信息')
- 标题+内容模式: prettyLog.info('标题', '这是内容')
技术实现
核心代码解析
JavaScript
1const prettyPrint = (title, ...texts) => {2 const color = texts.pop(); // 最后一个参数是颜色3 const processedTexts = texts4 .map((t) => {5 // 处理不同类型的数据6 if (typeof t === 'function') {7 return t.toString();8 } else if (t instanceof Date) {9 return t.toISOString();10 } else if (Array.isArray(t)) {11 // 数组处理12 return t13 .map((item) =>14 typeof item === 'object' && item !== null15 ? JSON.stringify(item, null, 2)16 : item17 )18 .join('\n');19 } else if (typeof t === 'object' && t !== null) {20 try {21 return JSON.stringify(t, null, 2);22 } catch {23 return String(t);24 }25 }26 return t;27 })28 .filter((t) => t !== '' && t !== undefined && t !== null); // 过滤空值2930 const text = processedTexts.length > 0 ? processedTexts.join(' ') : '';3132 // 输出格式化日志33 if (text) {34 console.log(35 `%c ${title} %c ${text} %c`,36 `background:${color};border:1px solid ${color}; padding: 1px; border-radius: 2px 0 0 2px; color: #fff;`,37 `border:1px solid ${color}; padding: 1px; border-radius: 0 2px 2px 0; color: ${color};`,38 'background:transparent'39 );40 } else {41 console.log(42 `%c ${title} %c`,43 `background:${color};border:1px solid ${color}; padding: 1px; border-radius: 2px 0 0 2px; color: #fff;`,44 'background:transparent'45 );46 }47};
设计亮点
- 智能类型处理 :自动识别并格式化不同类型的数据
- 函数转为字符串表示
- 日期对象转为 ISO 格式
- 数组和对象进行美化输出
- 处理可能的序列化异常
- CSS 样式增强 :利用 console.log 的 CSS 样式支持,创建带有背景色、边框和圆角的美观输出
- 灵活的 API 设计 :支持单参数和多参数调用模式,适应不同的使用场景
- 空值过滤 :自动过滤空值,避免无意义的输出
使用示例
基本用法
JavaScript
1import prettyLog from '@/utils/prettyLog';23// 信息日志4prettyLog.info('这是一条普通信息');56// 成功日志7prettyLog.success('操作成功', '用户数据已保存');89// 警告日志10prettyLog.warning('注意', '磁盘空间不足');1112// 错误日志13prettyLog.error('错误', '网络请求失败');
复杂数据类型输出
JavaScript
1// 输出对象2const user = { id: 1, name: 'John', role: 'admin' };3prettyLog.info('用户信息', user);45// 输出数组6const items = [1, 2, { id: 3, value: 'test' }];7prettyLog.info('列表数据', items);89// 输出日期10prettyLog.info('当前时间', new Date());1112// 输出函数13prettyLog.info('处理函数', function process() { return 'result'; });
应用场景
- 开发调试 :在开发过程中快速识别不同类型的日志信息
- 性能监控 :标记关键操作的执行时间和结果
- 错误追踪 :突出显示错误信息,便于快速定位问题
- 状态管理 :可视化应用状态变化,辅助调试复杂逻辑
- API 响应检查 :美化展示 API 返回的 JSON 数据
技术要点解析
1. 参数处理技巧
JavaScript
1const title = isEmpty(content) ? 'Info' : textOrTitle;2const text = isEmpty(content) ? textOrTitle : content;
这段代码巧妙地处理了两种调用模式,当只有一个参数时,将其作为内容,使用默认标题;当有多个参数时,第一个参数作为标题,其余作为内容。
2. 扩展运算符的应用
JavaScript
1prettyPrint(title, ...text, '#909399');
使用扩展运算符 ... 将数组展开为参数列表,同时在末尾添加颜色参数,简化了函数调用。
3. 类型安全处理
工具对各种数据类型都进行了安全处理,特别是对象序列化可能失败的情况:
JavaScript
1try {2 return JSON.stringify(t, null, 2);3} catch {4 return String(t);5}
这确保了即使遇到循环引用等无法序列化的对象,也能提供基本的字符串表示。
性能与最佳实践
- 生产环境处理 :在生产环境中,应考虑禁用或减少日志输出,可以通过环境变量控制
- 选择性日志 :根据重要性选择合适的日志级别,避免信息过载
- 避免敏感信息 :不要记录密码、令牌等敏感信息
- 结合其他工具 :可与 Sentry、LogRocket 等工具结合,提供更完整的错误追踪
扩展思路
- 日志级别控制 :添加全局配置,根据环境或需求控制显示哪些级别的日志
- 日志持久化 :添加将关键日志保存到 localStorage 或远程服务的功能
- 性能标记 :集成 performance.mark() 和 performance.measure() ,提供性能计时功能
- 分组功能 :支持 console.group() 分组相关日志
- 可点击链接 :为错误日志添加源代码位置链接,便于快速定位
总结
prettyLog.js 是一个简单而强大的日志美化工具,通过彩色样式和智能格式化,大幅提升了控制台日志的可读性。它不仅使调试过程更加高效,还为团队协作提供了统一的日志格式。在前端开发中,这样的小工具往往能带来意想不到的效率提升。 无论是个人项目还是团队协作,都可以考虑引入或参考这样的日志工具,让开发过程更加顺畅。