浅析Node.js+Winston库如何构建简单日志功能

本篇文章给大家介绍一下node.js中使用winston库构建一个简单日志功能的方法,希望对大家有所帮助!

浅析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

1.png

也可以更改日志级别,修改 logger ,只在 console.error 方式下使用 winston:

2.png

记录了数据库连接错误信息,上面的信息仅只是为了演示。

多 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,};

登录后复制

运行项目,可以看到日志文件:

3.png

至此, Winston 的基本使用指南介绍完了,以上这些基本可以满足日常项目的需要了。

更多编程相关知识,请访问:编程视频!!

以上就是浅析Node.js+Winston库如何构建简单日志功能的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2706940.html

(0)
上一篇 2025年3月7日 20:07:32
下一篇 2025年3月7日 20:07:42

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • 浅谈Nodejs中要怎么做定时任务

    本篇文章给大家介绍一下node定时任务的实现方法,希望对大家有所帮助! 目前我们遇到了这样一个需求,每个用户都可以自定义定时推送,定时任务的时间配置由用户自己配置,随时修改,而不是传统的由服务器设定好时间跑定时任务。【推荐学习:《node》…

    2025年3月7日
    200
  • windows怎么卸载nodejs

    windows卸载nodejs的方法:1、在桌面左下角单击【开始】按钮,然后选择【控制面板】;2、在控制面板窗口中找到【卸载程序】,单击打开;3、找到node.js并单击右键选择【卸载】即可。 本文操作环境:Windows7系统、nodej…

    2025年3月7日 编程技术
    200
  • 怎样删除nodejs

    删除nodejs的方法:1、从“控制面板”的“卸载程序”界面中卸载node程序;2、杀死所有与节点相关的进程;3、检查环境变量以确保没有引用Nodejs或npm存在即可。 本文操作环境:Windows7系统、nodejs10.16.2版、D…

    2025年3月7日
    200
  • 命令行怎么查看nodejs版本号

    命令行查看nodejs版本号的方法:1、使用“win+r”快捷键打开“运行”窗口,输入cmd命令,点击“确定”,打开“cmd命令行窗口”;2、在cmd命令行中,使用cd命令进入node安装目录 ,执行“node -v”命令,即可查看版本号。…

    2025年3月7日 编程技术
    200
  • 怎么用nodejs运行脚本

    运行方法:1、打开cmd命令窗口,执行“node”命令进入node编辑模式,输入js脚本代码,回车运行即可。2、将js脚本代码写入js文件中,在cmd命令窗口中执行“node js文件路径”即可。 本教程操作环境:windows7系统、no…

    2025年3月7日 编程技术
    200
  • nodejs有什么优点

    nodejs的优点:1、Nodejs语法完全是js语法,只要懂js基础就可以学会Nodejs后端开发;2、处理高并发场景性能更高;3、可实现高性能服务器;4、开发周期短、开发成本低、学习成本低。 本教程操作环境:windows7系统、nod…

    2025年3月7日
    100
  • nodejs如何查看版本

    nodejs查看版本的方法:1、打开“开始”菜单,在搜索框输入“cmd”;2、在搜索结果中,点击“cmd.exe”,打开cmd命令窗口;3、使用cd命令进入nodejs安装目录;4、执行“node -v”命令即可查看版本。 本教程操作环境:…

    2025年3月7日 编程技术
    200
  • 深入浅析Node.js中的包与NPM

    本篇文章带大家了解一下node.js的包管理工具:包与npm,希望对大家有所帮助! 摘要:包与NPM Node组织了自身的核心模块,也使得第三方文件模块可以有序的编写和使用。 包与NPM Node组织了自身的核心模块,也使得第三方文件模块可…

    2025年3月7日
    100
  • 认识Node.js,聊聊node的模块化

    本篇文章带大家认识一下node.js,看看如何查看已安装的 node.js 的版本号 ,并一起聊聊node的模块化,希望对大家有所帮助! Node.js简介 概念: 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。【…

    2025年3月7日 编程技术
    200
  • 深入解析Node.js中的非阻塞I/O

    本篇文章带大家了解一下node.js中的非阻塞i/o,希望对大家有所帮助! 如何理解NodeJs的非阻塞I/O 1、I/O:即  Input/output  指一个系统的输入和输出 2 、非阻塞和阻塞的主要区别在:在接收输入到输出结果之间的…

    2025年3月7日 编程技术
    200

发表回复

登录后才能评论