JS Winston - 使用 Winston.js 登录 JavaScript

位置:首页>文章>详情   分类: Web前端 > 编程技术   阅读(359)   2024-05-15 11:05:43

Winston 教程展示了如何使用 Winston.js 库在 JavaScript 中进行日志记录,并在几个代码示例中演示了日志记录。

记录

记录是将信息写入日志文件的过程。日志文件包含有关操作系统、软件或通信中发生的各种事件的信息。

记录的目的

日志记录用于以下目的:

  • 故障排除
  • 信息收集
  • 剖析
  • 审计
  • 生成统计数据

日志记录不仅限于识别软件开发中的错误。它还用于检测安全事件、监视策略违规、在出现问题时提供信息、查找应用程序瓶颈或生成使用数据。

要记录哪些事件

应记录的事件包括输入验证失败、身份验证和授权失败、应用程序错误、配置更改以及应用程序启动和关闭。

哪些事件不记录

不应记录的事件包括应用程序源代码、会话标识值、访问令牌、敏感个人数据、密码、数据库连接字符串、加密密钥、银行账户和持卡人数据。

记录最佳实践

以下是进行日志记录的一些最佳实践:

  • 记录应该是有意义的。
  • 日志记录应该结构化并在不同级别完成。
  • 日志记录应包含上下文。
  • 日志消息应该是人类可以理解的,并且可以被机器解析。
  • 日志记录应该是平衡的;它不应包括太少或太多的信息。
  • 日志记录应适应开发和生产。
  • 在更复杂的应用程序中登录应该分成几个日志文件。

温斯顿

温斯敦 是一个流行的 JavaScript 日志库。它被设计成简单和通用的。每个 Winston 记录器都可以在不同级别配置多个传输。默认情况下,Winston 的日志使用 JSON 格式。

$ npm i winston

我们使用 npm 工具安装 winston 包。

温斯顿记录器

Winston 记录器将消息记录到日志文件中。使用 createLogger 函数创建一个 winston 记录器。此外,如果没有明确指定记录器,则有一个默认记录器。

createLogger 函数接受以下选项:

姓名 默认 描述
等级 信息 要记录的日志消息的最大级别
等级 winston.config.npm.levels 选择的级别消息类型集
格式 winston.format.json文件 日志消息的格式
运输 没有交通工具 日志消息的日志记录目的地集
错误退出 真的 处理的异常是否导致 process.exit
沉默的 错误的 如果为真,所有日志都被抑制
表:Winston 记录器参数

温斯顿运输

传输是我们日志的存储设备或输出机制。每个 Winston 记录器都可以在不同级别配置多个传输。 Winston 带有三个核心传输:控制台、文件和 HTTP。必须创建传输并将其添加到记录器中。

传输具有以下设置:

  • level - 设置要记录的消息级别。
  • filename - 这是要写入日志数据的文件名。
  • handleExceptions - 确定是否捕获和记录未处理的异常。
  • json - 以 JSON 格式记录日志数据。
  • maxsize - 在创建新文件之前设置日志文件的最大大小(以字节为单位)。
  • maxFiles - 限制超过日志文件大小时创建的文件数。
  • colorize - 对输出进行着色;在查看控制台日志时很有帮助。

温斯顿日志记录级别

日志记录级别指示消息优先级并用整数表示。它们被指定用于传输。 Winston 带有预定义的日志记录级别集:npmsyslogcli

以下是默认的 npm 日志记录级别:

  • 0:错误
  • 1:警告
  • 2:信息
  • 3:http
  • 4:冗长
  • 5:调试
  • 6:傻

将记录特定级别或更高级别的任何内容。例如,通过指定信息级别,将记录级别为错误、警告或信息的任何内容。调用记录器时指定日志级别。

logger.info('Information message').

我们使用 info 函数记录一条信息消息。

logger.log('info', Information message').

这是记录信息消息的另一种方法。

温斯顿格式

日志消息采用 Winston 格式。 Winston 包含多种内置格式,包括:

  • 简单的
  • JSON
  • 客户端
  • 垫层
  • 着色
  • 扑通一声
  • 对齐

默认格式为 json。可以使用 combine 组合格式,也可以使用 printf 创建自定义格式。

温斯顿简单例子

以下是一个简单的 Winston 示例。

simple.js
const winston = require('winston');


const logger = winston.createLogger({
    transports: [
        new winston.transports.Console()
    ]
});

logger.info('Information message');
logger.warn('Warning message');
logger.error('Error message');

我们创建一个控制台记录器并记录三个消息。由于默认的日志记录级别是 info,因此会记录所有三个消息。

$ node simple.js 
{"message":"Information message","level":"info"}
{"message":"Warning message","level":"warn"}
{"message":"Error message","level":"error"}

在输出中,我们可以看到 JSON 格式的三条消息。

温斯顿日志功能

我们可以使用自定义日志函数(infowarn)或使用通用的log 来记录消息> 函数并将日志级别指定为第一个选项。

log_funs.js
const winston = require('winston');


const logger = winston.createLogger({
    transports: [
        new winston.transports.Console()
    ]
});

logger.info('Information message');
logger.warn('Warning message');

logger.log('info', 'Information message')
logger.log('warn', 'Warning message')

在示例中,我们以两种方式记录消息。

$ node log_funs.js 
{"message":"Information message","level":"info"}
{"message":"Warning message","level":"warn"}
{"level":"info","message":"Information message"}
{"level":"warn","message":"Warning message"}

温斯顿配置记录器

使用 configure 函数,我们可以配置和已经创建的记录器。

configure_logger.js
const winston = require('winston');


const logger = winston.createLogger({
    transports: [
        new winston.transports.Console()
    ]
});

logger.info('Information message');
logger.warn('Warning message');
logger.error('Error message');

logger.configure({
    level: 'error',
    transports: [
        new winston.transports.Console()
    ]
});

logger.info('Information message 2');
logger.warn('Warning message 2');
logger.error('Error message 2');

在示例中,我们将日志记录级别更改为 'error' 并调用另外三个日志函数。从附加消息中仅输出第二个错误消息。

$ node configure_logger.js 
{"message":"Information message","level":"info"}
{"message":"Warning message","level":"warn"}
{"message":"Error message","level":"error"}
{"message":"Error message 2","level":"error"}

温斯顿默认记录器

可以直接通过 winston 模块访问默认记录器。最初,默认记录器上没有设置传输。我们必须通过 addremoveconfigure 方法添加或删除传输。

default_logger.js
const winston = require('winston');


const console = new winston.transports.Console();

winston.add(console);
winston.info('Information message');
winston.remove(console);

该示例使用默认记录器来记录信息消息。

温斯顿格式客户端

cli 格式是 colorizepadLevels 格式的组合。

format_cli.js
const winston = require('winston');
 

const myformat = winston.format.cli({ colors: { info: 'blue' }});


const logger = winston.createLogger({
    transports: [
        new winston.transports.Console({
            format: myformat
        })
    ]
});

logger.info('Information message');

在示例中,我们将 cli 格式传递给控制台传输。我们选择蓝色。

温斯顿合并格式

可以使用 combine 组合格式。

format_combine.js
const winston = require('winston');
 

const myformat = winston.format.combine(
  winston.format.colorize(),
  winston.format.timestamp(),
  winston.format.align(),
  winston.format.printf(info => `${info.timestamp} ${info.level}: ${info.message}`)
);

const logger = winston.createLogger({
    transports: [
        new winston.transports.Console({
            format: myformat
        })
    ]
});

logger.info('Information message');

在示例中,我们结合了 colorizetimestampalignprintf 格式。

$ node format_combine.js 
2020-04-04T17:17:48.882Z info:  Information message

温斯顿运输最大尺寸

传输的 maxsize 属性在创建新文件之前设置日志文件的最大大小(以字节为单位)。

max_size.js
const path = require('path');
const winston = require('winston');

const logger = winston.createLogger({
  level: 'info',
  format: winston.format.printf(info => `${info.message}`),
  transports: [
    new winston.transports.File({
      filename: path.join(__dirname, 'error.log'),
      level: 'info',
      maxsize: 500
    })
  ]
});

logger.info(`${'a'.repeat(200)}`);
logger.info(`${'b'.repeat(200)}`);
logger.info(`${'c'.repeat(200)}`);


setTimeout(() => {
  logger.info(`${'d'.repeat(200)}`);
  logger.info(`${'e'.repeat(200)}`);
}, 1500);

我们使用文件传输并将 maxsize 设置为 500 字节。后来我们在文件中写入了 500 多个字符。前 600 个字符写入 error.log 文件,其余 400 个字符写入 error1.log 文件。

温斯顿多记录器

在下一个示例中,我们创建两个写入文件的记录器。

loggers.js
const winston = require('winston');

const loggers = {
  mjson: winston.createLogger({
    level: 'info',
    format: winston.format.json(),
    transports: [new winston.transports.File({ filename: 'app-info.log'})],
  }),

  simple: winston.createLogger({
    level: 'error',
    format: winston.format.simple(),
    transports: [new winston.transports.File({ filename: 'app-error.log'}),],
  })
};


loggers.mjson.info('Information message');
loggers.mjson.error('Error message');
loggers.mjson.debug('Some message');

loggers.simple.error('Error message');
loggers.simple.info('Information message');
loggers.simple.warn('Warning message');
loggers.simple.debug('Some message');

mjson 记录器以 json 格式写入,simple 记录器以简单格式写入。记录器具有不同的日志级别。

$ node loggers.js
$ cat app-error.log 
error: Error message
$ cat app-info.log 
{"message":"Information message","level":"info"}
{"message":"Error message","level":"error"}

我们运行程序并显示文件内容。

在本文中,我们使用了 Winston 日志记录库。

地址:https://www.cundage.com/article/javascript-winston.html

相关阅读

Big.js 教程展示了如何使用 Big.js 模块在 JavaScript 中使用任意精度的大十进制算法。 大.js 大.js 是一个小型、快速的 JavaScript 库,用于任意精度的十进...
faker.js 教程展示了如何使用 faker.js 库在 JavaScript 中生成虚假数据。 伪造者.js 伪造者.js 是一个用于生成假数据的 JavaScript 库。构建和测试我们...
Node.js 教程是 Node.js 的入门教程。我们描述了 Node.js 并提供了一些 Node.js 代码示例。 Nojde.js 节点.js 是一个开源、跨平台的 JavaScript...
JavaScript 数组教程展示了如何在 JavaScript 中使用数组。 数组是许多值的集合。数组项称为数组的元素。每个元素都可以通过索引引用。数组是从零开始的。 JavaScript 数...
Liquid.js 教程展示了如何在 JavaScript 应用程序中使用 Liquid 模板引擎。 液体 液体 是一个 JavaScript 模板引擎。它是由 Shopify 创建的。 Liq...
Rollup.js 教程展示了如何使用 Rollup.js 模块打包器。 卷起 是一个 JavaScript 模块打包器。它将较小的代码片段编译成较大的库或应用程序包
Moment.js 教程展示了如何使用 Moment.js 模块在 JavaScript 中处理日期和时间。 时刻.js 时刻.js 是一个轻量级的 JavaScript 日期库,用于解析、验证...
Day.js 教程展示了如何使用 Day.js 模块在 JavaScript 中处理日期和时间。 日.js Day.js 是一个极简主义的 JavaScript 日期库,用于解析、验证、操作和格...
JavaScript JSON.parse 教程展示了如何将 JSON 字符串解析为 JavaScript 对象。 JSON JSON(JavaScript 对象显示法) 是一种轻量级数据交换格...
在本教程中,我们展示了如何在 JavaScript 中创建和使用模块。 模块 是 JavaScript 代码的容器。模块在单独的文件中定义。模块的目的是组织和隔离代码。 JavaScript 多...