前端日志系统设计
前言
日志系统是一种不可或缺的跟踪调试工具,特别是在任何无人职守以及那些没有跟踪调试环境的系统中有着广泛的应用。 长期以来, 日志系统作为一种应用程序服务,对于跟踪调试、程序状态记录、崩溃数据恢复都有非常现实的意义。
1.1 前端日志的误区
在编写代码的时候,随手会用console.log()来输出一些信息,这是往控制台输出一段文字是查看程序运行状态最简单的做法,但这种方式并不能解决全部的问题。有时候,对于一个我们无法实时查看系统输出的系统或者一个确实需要保留我们输出信息的系统,良好的日志系统显得相当必要。
因此,不能随意的输出各种不规范的调试信息,这些随意输出的信息是不可控的,难以清除,可能为后台监控、错误排除和错误恢复带来相当大的阻力。
1.2 日志系统框架的基本功能
一个完备的日志系统框架通常应当包括如下基本特性:
所输出的日志拥有自己的分类。这样在调试时便于针对不同系统的不同模块进行查询,从而快速定位到发生日志事件的代码。
日志按照某种标准分成不同级别。分级以后的日志,可以用于同一分类下的日志筛选。
支持不同的记录媒介。不同的工程项目往往对日志系统的记录媒介要求不同,因此日志系统必须提供必要的开发接口,以保证能够比较容易的更换记录介质。
高性能。在开发、生产环境可以进行过滤,减少不必要日志。
稳定性。日志系统必须是保持高度的稳定性,不能因为日志系统内部错误导致主要业务代码的崩溃。
设计
日志系统看似需要根据各种维度进行划分,比如
根据模块:普通模块日志,打点日志,与系统进行交互(js to native);
根据业务周期:个人测试日志,开发环境日志,上线环境日志;
由于客户端日志系统与业务逻辑相关联性太强,并且带有很多主观因素,因此日志系统最主要的是出口统一;无论在哪里打日志,都可以轻松进行管理,控制。
2.1 系统架构
2.2 日志记录部分的设计
日志分级:
- 默认的 error,warn,info,log,以及不定级的trace;
- 通过颜色获取级别区分;
- 通过新的log类型,来进行策略划分;
日志格式:
Color + 时间戳 + 模块 + other
业务层使用:
- 实现 ILogWrite接口,创建新的日志类型;
- 通过Logger注册;
- 通过Logger.trace 调用;
- 通过编译器,去掉 外部使用的console.log日志输出;
参考
NPM酷库:log4js JavaScript日志框架
https://segmentfault.com/a/1190000012726340
日志格式规范
https://blog.csdn.net/lk142500/article/details/80424945
通用日志格式规范(参考 RFC5424 Syslog协议)
https://www.cnblogs.com/zhangjpn/p/7226541.html
代码规范(阿里)——日志规范
https://www.jianshu.com/p/256d4dd0bd0e
日志规范
http://www.cocoachina.com/articles/30123
Java日志系统框架的设计与实现
https://blog.csdn.net/chjskarl/article/details/18987183