前言
日志服务是每个应用程序开发者都必须面对的问题,原生的 console.log() 可能已经无法满足工程的需求了,一些第三方的 logger 库如 log4js, winston 等也广泛用于前后端的开发。cisco-winston 是一个基于 winston 的扩展工具包,可以支持远程日志收集,过滤和格式化以及事件统计等多种功能。
本文将会详细地阐述如何使用 cisco-winston 这个 npm 包来在前端项目中进行日志记录,设计 logger 实例,自定义转换器和可扩展的日志工作流。
安装
在项目中执行以下安装命令:
npm install cisco-winston --save
配置
cisco-winston 的日志记录对象称为 logger 实例,logger 的配置对象可通过同父类 winston 的 .createLogger()
API 来创建。
我们需要配置一下几个常用参数:
- 消息输出级别
- 消息日志存储位置
- 自定义的消息格式
以下为一个简单的 logger 配置:
-- -------------------- ---- ------- ----- ------- - ------------------- ----- ------------ - ------------------------- ----- ------ - ---------------------- ------ -------- ------- ----------------------- ---------------------- --------------------------- ---------------------- -- ------------ - -------- ------------ -- ----------- - --- ----------------------------- -- ---
level
: 指定日志级别,包括 error、warn、info、http、verbose、debug、silly,低于此级别将不会被输出。format
: 指定日志消息的格式化方式,即结构的描述。transports
: 指定日志存储方式,支持多种存储方式,如控制台、文件等。
输出
下面我们来看一下如何调用 cisco-winston 日志记录器。
logger.info('Hello World'); logger.error('Error: %s', errorMessage);
日志消息包含两个部分:
- 日志级别,当前日志记录的级别,如 info,warn 或 error。
- 消息内容,根据第一部分日志级别记录的任意消息,可以跟上占位符并在后面以参数的方式行文。
cisco-winston 提供的日志标准格式默认如下:
{ "message": "This is a sample message", "level": "info", "timestamp": "2022-02-22T05:35:36.000Z", "tags": [], "service": "your-awesome-service", "env": "development" }
tags
: 可以将日志消息分类,比如 "access", "error", "performance" 等。service
: 应用或系统名称。env
: 应用或系统所处的环境,比如 "production", "staging" 等。
我们可以自定义 format 来输出符合我们业务需求的消息格式。
自定义转换器
有时候,需要将日志消息中的某些部分统一处理或者添加一些消息没有的属性,这时候就需要自定义转换器了。
比如增加请求 URL,或是在信息消息内容中添加机器人、设备信息等,简单的示例如下:
-- -------------------- ---- ------- ----- ------ - ----------------------- ---------------------- ------------------------------ -- -- ------ ------ ------- ----------- ---- --------------------------- ---------------------- -- ----- ------ - ---------------------- ------ -------- ------- ------- ------------ - -------- ------------ -- ----------- - --- ----------------------------- -- ---
自定义转换器接口如下:
export interface LogTransformer { (logInfo: LogInfo): LogInfo; }
可扩展日志处理流程
cisco-winston 还支持多个简单高效的扩展程序来处理日志事件,以便进一步优化性能,比如去重、过滤、统计等。我们可以通过 useFilter()
和 useMiddleware()
方法来注册。
示例如下:
-- -------------------- ---- ------- ----- ------ - -------------- ------ -------- ------- -------- ------------------------ ----------- -------------- -- ----- -- --- --- --------------------------- ---------- ---- -- ----- --- ------------------------------ -------------- ----------------- -- -------- ----------- -- --------------- ------- -- -- ----- ------------ --- --- -------------- -- ------------ - -------- ------------ -- ---
logFilter()
: 注册一个用来对日志信息过滤的侦听器。可以过滤掉一些不需要处理的请求,比如内部请求或者性能检测请求等。logTransform()
: 注册一个用来转换日志信息的侦听器。可以对信息中的一些属性进行编辑或添加,甚至是将消息转化为其他消息。logRouteCounter()
: 注册一个用来统计请求的流量和请求的路径的侦听器。可以让你更加清楚的了解应用程序的运行状态。
在上面的示例中,我们定义了三个中间件,第一个是日志过滤器,排除了一些不需要处理的请求,第二个是日志转换器,将日志消息中的某些部分进行编辑或添加,最后一个是请求计数器,用于统计请求路径和流量等信息。
总结
cisco-winston 是一个基于 winston 的扩展工具包,它支持远程日志收集、日志过滤和格式化,事务跟踪、错误报警和自定义的日志事件支持。
其中,常用的配置参数包括消息输出级别、消息日志存储位置和自定义消息格式。我们还可以进行自定转换器和可扩展的日志工作流等深入学习和应用。
在实际开发中,一定要根据实际需求和问题的性质来选择合适的日志记录方式和工具,以达到系统的可用性、可维护性和可扩展性。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6005534481e8991b448d080a