前端日志管理模块的设计与实现
一、前端问题背景
在项目中,日志我们会频繁用到 console.log() 来输出一些关键信息到控制台中,管理有助于开发调试,模块以及问题的计实排查,待项目上线后,前端这些调试日志又得及时清除。日志
同时在前端质量要求下,管理我们会做“前端埋点”,模块用于远程上报一些关键行为信息,计实用于在出问题时还原用户的前端操作路径,复现 BUG,日志从而解决问题,管理而各种各样的模块上报若是能在业务开发中抹平差异,也有助于研发提效。计实
因此,有必要在团队中封装日志工具(Logger),用于统一管理日志输出和格式化上报,网站模板降低开发者对多平台上报差异的心智负担。
二、需求概述
预期日志管理工具(Logger)需要有如下能力:
支持区分info、warn、error 三种本地调试类型日志支持远程上报自定义日志report()支持设置 namespace,用于区分代码执行的 scope支持链式操作区分生产环境和开发环境,生产环境禁止输出日志到控制台支持功能可扩展三、方案设计
在阅读完 Axios 的源码后,个人认为 Axios 里对于设计模式的应用是非常灵活,同理,一个好的日志工具也应当遵守着一定的软件设计模式原则。
作为项目中用到的日志工具,单例模式应当是云服务器提供商更适合的选择!
Logger 的打印输出能力,本质上还是借助了 window.console 对象中的方法:
Console 对象
在面向对象编程中,我们可以认为 console 是一个已经初始化的实例,同时也是一个单例,因为它是全局唯一。
而单例模式的最大好处就是全局唯一,对于做日志统一管理有着天然的友好支持基础。