在前端开发中,日志是非常重要的一环。而在 Node.js 应用程序中,winston 常被用作是日志工具。winston-wingman 是一组 winston 的针对 Node.js 的扩展工具。这些扩展工具可以减轻一些 Node.js 本身日志功能的缺陷,而且完全兼容 winston 的API接口。
安装
在使用 winston-wingman 之前,我们必须先安装它。
使用 npm 进行全局安装:
npm install -g winston-wingman
或者在项目中直接安装:
npm install --save winston-wingman
使用
winston-wingman 的使用方式与 winston 一样,我们可以通过 require 方式引入。例如:
const winston = require('winston-wingman');
Logging Levels
在 winston 中,日志级别有以下七个。从低到高依次为:
- silly
- debug
- verbose
- info
- warn
- error
- fatal
日志级别越高,记录的信息越详细。例如设置级别为 info 时,会记录所有的 info、warn、error 和 fatal 日志。
winston-wingman 在此之上添加了一个级别 silent,表示完全禁用日志记录。也就是说,设置日志级别为 silent 时相当于关闭了日志记录。
Transport
winston-wingman 支持的 Transport 有两种。
Console Transport
console 是基于文本输出的 Transport,也是默认的 Transport。
const logger = winston.createLogger({ transports: [new winston.transports.Console({ level: 'debug', prettyPrint: true, colorize: true })] });
File Transport
如下是一个使用 File Transport 的例子。
-- -------------------- ---- ------- ----- ------ - ---------------------- ----------- ---- ------------------------- ------ -------- --------- ------------------ ----------------- ----- ------------ ----- -------- -------- -- --- --------- - --- ---
在上面的例子中,我们设置了 filename、maxsize 和 maxFiles。
- filename:指定日志文件的名称。如果不存在,则尝试创建该文件。否则直接写入。当然,它还支持路径,例如
logs/application.log
。 - maxsize:文件大小限制。如果日志文件达到限制,则重新生成一个新文件。通常,这将帮助您实现日志的轮换。
- maxFiles:可以定义保留历史日志文件的总个数。这可以通过 rotation 的方式来实现。
或者,使用默认的方式:
const logger = winston.createLogger({ transports: [new winston.transports.File({ level: 'error', filename: 'application.log', })] });
日志输出格式
winston-wingman 也支持自定义日志输出格式,例如:
-- -------------------- ---- ------- ----- ------ - ---------------------- ------- ----------------------- --------------------------- --------------------- -- ----------- - --- ---------------------------- ------ ------ --- -- ---
当然,除了 JSON 格式之外,winston 还支持其他的格式。例如,您也可以使用 winston.format.printf 方法自定义输出格式:
-- -------------------- ---- ------- ----- ------ - ---------------------- ------- ----------------------- --------------------------- -------------------------- -------------------------- -- -------------------- -------------- ----------------- -- ----------- - --- ---------------------------- ------ ------ --- -- ---
在上例中,我们添加了一个 timestamp 字段,在传入 log 的时候会自动添加日期时间。
总结
winston-wingman 是 Node.js 项目中非常优秀的日志工具,兼容 winston 的API接口并提供了许多扩展,可以帮助 Node.js 开发者解决 Node.js 本身的日志功能的缺陷。
自定义日志格式和级别配合两个现成的 Transport,通常就足以适应大部分情况。另外,我们还可以为 Transport 定义每日循环和备份机制,以便进行日志轮换,以及配置红色独角兽,使日志信息更加醒目。
最后,希望您在 Node.js 项目日志记录过程中, 合理使用 winston-wingman 工具,记录项目异常,便于日后开发维护。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6006710e8dd3466f61ffe209