本篇文章给大家介绍一下Node.js中使用Winston库构建一个简单日志功能的方法,希望对大家有所帮助!
Winston 是强大、灵活的 Node.js
开源日志库之一,理论上, Winston 是一个可以记录所有信息的记录器。这是一个高度直观的工具,易于定制。可以通过更改几行代码来调整其背后的逻辑。它使对数据库或文件等持久存储位置的日志记录变得简单容易。【推荐学习:《nodejs 教程》】
Winston 提供以下功能:
- 集中控制日志记录的方式和时间:在一个地方更改代码即可
- 控制日志发送的位置:将日志同步保存到多个目的地(如Elasticsearch、MongoDB、Postgres等)。
- 自定义日志格式:带有时间戳、颜色日志级别、JSON格式等前缀。
winston实践
实践代码将在项目 pretender-service 中增加日志功能,安装依赖:
npm install winston --save
接下来需要初始化 logger
,由于项目中已经存在一个 logger.js
文件,这里再创建一个 winstonLogger.js
,代码如下:
const { createLogger, format, transports } = require("winston"); module.exports = createLogger({ transports: [ new transports.File({ filename: "logs/server.log", level: "info", format: format.combine( format.timestamp({ format: "MMM-DD-YYYY HH:mm:ss" }), format.align(), format.printf( (info) => `${info.level}: ${[info.timestamp]}: ${info.message}` ) ), }), ], });
通过调用 winston
库中的 createLogger
函数来初始化记录器。在 transports
对象中,可以提供一个文件名将日志存储在文件中。默认情况下,日志记录未格式化并打印为带有两个参数的 JSON 字符串,日志消息和等级。
下面对之前的 logger
进行修改,将winston
日志记录器加入进去,具体修改方式参阅代码,下面给出其使用方法:
const winlogger = require("./winstonLogger"); winlogger.info("日志内容");
执行程序后可以会在根目录生成相应的日志文件 logs/server.log
也可以更改日志级别,修改 logger
,只在 console.error
方式下使用 winston
:
记录了数据库连接错误信息,上面的信息仅只是为了演示。
多 transports
winston
允许设置多种 transport
,在 winstonLogger.js
中更改 createLogger
函数如下:
const { createLogger, format, transports } = require("winston"); module.exports = createLogger({ format: format.combine( format.timestamp({ format: "MMM-DD-YYYY HH:mm:ss" }), format.align(), format.printf((i) => `${i.level}: ${[i.timestamp]}: ${i.message}`) ), transports: [ new transports.File({ filename: "logs/info.log", level: "info", format: format.combine( format.printf((i) => i.level === "info" ? `${i.level}: ${i.timestamp} ${i.message}` : "" ) ), }), new transports.File({ filename: "logs/error.log", level: "error", }), ], });
再次执行程序,将会看到 error.log
和 info.log
文件,由于在 logger
中未设置 info
,因此 info.log
的内容为空,error.log
内容和上面的一样。
多 loggers
winston
允许设置多个 logger
,在实际项目中可以为每个模块创建一个记录器 logger
, 如下代码,创建一个用户日志记录器和登录验证记录器:
const { createLogger, format, transports } = require("winston"); const customFormat = format.combine( format.timestamp({ format: "MMM-DD-YYYY HH:mm:ss" }), format.align(), format.printf((i) => `${i.level}: ${[i.timestamp]}: ${i.message}`) ); const globalLogger = createLogger({ format: customFormat, transports: [ new transports.File({ filename: "logs/info.log", level: "info", format: format.combine( format.printf((i) => i.level === "info" ? `${i.level}: ${i.timestamp} ${i.message}` : "" ) ), }), new transports.File({ filename: "logs/error.log", level: "error", }), ], }); const authLogger = createLogger({ transports: [ new transports.File({ filename: "logs/authLog.log", format: customFormat, }), ], }); module.exports = { globalLogger: globalLogger, authLogger: authLogger, };
修改后代码创建了一个全局记录器 globalLogger
和一个鉴权记录器 authLogger
,对应修改 logger.js
:
const { globalLogger } = require("./winstonLogger"); globalLogger.error(message);
每日滚动日志文件
正如前面介绍的最佳实践中提到的,按照特定的条件对日志文件进行分割,通常按照日期、大小进行分割,并设置保存的日志天数。为实现这些需求,要有一个安装一个 Winston 相关的依赖库。
npm install winston-daily-rotate-file --save
安装完成后使用以下代码更新到 winstonLogger.js
文件:
const { createLogger, format, transports } = require("winston"); require("winston-daily-rotate-file"); const customFormat = format.combine( format.timestamp({ format: "MMM-DD-YYYY HH:mm:ss" }), format.align(), format.printf((i) => `${i.level}: ${[i.timestamp]}: ${i.message}`) ); const defaultOptions = { format: customFormat, datePattern: "YYYY-MM-DD", zippedArchive: true, maxSize: "20m", maxFiles: "14d", }; const globalLogger = createLogger({ format: customFormat, transports: [ new transports.DailyRotateFile({ filename: "logs/info-%DATE%.log", level: "info", ...defaultOptions, }), new transports.DailyRotateFile({ filename: "logs/error-%DATE%.log", level: "error", ...defaultOptions, }), ], }); const authLogger = createLogger({ transports: [ new transports.DailyRotateFile({ filename: "logs/authLog-%DATE%.log", ...defaultOptions, }), ], }); module.exports = { globalLogger: globalLogger, authLogger: authLogger, };
运行项目,可以看到日志文件:
至此, Winston 的基本使用指南介绍完了,以上这些基本可以满足日常项目的需要了。
更多编程相关知识,请访问:编程视频!!
以上是浅析Node.js+Winston库如何构建简单日志功能的详细内容。更多信息请关注PHP中文网其他相关文章!

Vercel是什么?本篇文章带大家了解一下Vercel,并介绍一下在Vercel中部署 Node 服务的方法,希望对大家有所帮助!

gm是基于node.js的图片处理插件,它封装了图片处理工具GraphicsMagick(GM)和ImageMagick(IM),可使用spawn的方式调用。gm插件不是node默认安装的,需执行“npm install gm -S”进行安装才可使用。

如何用pkg打包nodejs可执行文件?下面本篇文章给大家介绍一下使用pkg将Node.js项目打包为可执行文件的方法,希望对大家有所帮助!

本篇文章带大家详解package.json和package-lock.json文件,希望对大家有所帮助!

node怎么爬取数据?下面本篇文章给大家分享一个node爬虫实例,聊聊利用node抓取小说章节的方法,希望对大家有所帮助!

本篇文章给大家分享一个Nodejs web框架:Fastify,简单介绍一下Fastify支持的特性、Fastify支持的插件以及Fastify的使用方法,希望对大家有所帮助!

本篇文章给大家分享一个Node实战,介绍一下使用Node.js和adb怎么开发一个手机备份小工具,希望对大家有所帮助!

先介绍node.js的安装,再介绍使用node.js构建一个简单的web服务器,最后通过一个简单的示例,演示网页与服务器之间的数据交互的实现。


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

SublimeText3 Linux新版
SublimeText3 Linux最新版

SecLists
SecLists是最终安全测试人员的伙伴。它是一个包含各种类型列表的集合,这些列表在安全评估过程中经常使用,都在一个地方。SecLists通过方便地提供安全测试人员可能需要的所有列表,帮助提高安全测试的效率和生产力。列表类型包括用户名、密码、URL、模糊测试有效载荷、敏感数据模式、Web shell等等。测试人员只需将此存储库拉到新的测试机上,他就可以访问到所需的每种类型的列表。

WebStorm Mac版
好用的JavaScript开发工具

SublimeText3 英文版
推荐:为Win版本,支持代码提示!