在我们开发过程中,日志记录是非常重要的一环,它可以提供我们程序的运行状况、错误和异常、性能和安全等方面的关键信息,让开发人员和运维团队更好地管理和维护应用程序。
那么在NodeJS中该如何进行日志记录呢? 有小伙伴就会说console.log
! 确实,Node.js中可以使用console.log
进行简单的日志记录,但是它将信息输出到控制台就结束了,不会被持久化保存到文件或其他存储设备中。所以通常只是在开发和调试阶段使用一下。
在生产环境中,更常见的做法是使用专门的日志记录库,如winston
、log4js
等,来实现更灵活和可配置的日志记录功能。本篇文章将介绍的是winston
的强大的日志记录功能。下面我们就从一个简单的node项目开始吧!
初始化项目
新建目录执行
npm init
初始化一个 node 项目。
然后在 package.json 文件中新增type:module
字段,这样我们就可以使用 ES6 语法了
{
"name": "winston",
"version": "1.0.0",
"description": "",
"main": "index.js",
"type": "module",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "ISC"
}
新建一个index.js
文件。ok,接下来我们就可以使用 winston 了
安装使用 winston
执行命令npm i winston -S
安装winston
,安装完成我们就可以在程序中导入使用了
比如在index.js
中我们可以使用 winston.createLogger 创建一个日志记录器
import winston from "winston";
const {
format, transports } = winston;
const logger = winston.createLogger({
level: "debug",
format: format.simple(),
transports: [new transports.Console()],
});
logger.info("cxkhtw");
然后我们执行node index.js
就会看到控制台打印了
info: cxkhtw
日志记录器接受以下参数:
名称 | 默认值 | 描述 |
---|---|---|
level | ‘info’ | 仅在 info.level 小于或等于此级别时记录 |
levels | winston.config.npm.levels | 表示日志优先级的级别(和颜色) |
format | winston.format.json | 用于 info 消息的格式化(参见:Formats) |
transports | [] | 日志传传输方式 |
exitOnError | true | 如果为 false,则处理的异常不会导致进程退出 |
exceptionHandlers | [] | 未捕获异常处理方式 |
silent | false | 如果为 true,则所有日志都将被禁止 |
我们简单看下上面常用的参数
level
它表示日志记录的最低等级,在 winston 中,日志级别遵循 RFC5424 指定的严重性顺序:所有级别的严重性被规定为从最重要到最不重要的数字递增。
const levels = {
error: 0,
warn: 1,
info: 2,
http: 3,
verbose