Nodejs中使用 log4js 记录日志

news/2024/12/24 6:38:05/文章来源:https://www.cnblogs.com/ltfxy/p/18626423

Node.js 中使用 log4js 记录日志

在开发和维护 Node.js 应用程序时,日志记录是一个至关重要的部分。良好的日志管理可以帮助我们跟踪程序运行状态、捕获异常、定位问题并优化性能。log4js 是一个强大的日志库,它为 Node.js 提供了灵活的日志记录功能,包括日志级别控制、日志输出方式、日志文件轮换等。本文将带你了解如何在 Node.js 中使用 log4js 记录日志。

为什么选择 log4js

在 Node.js 中,日志记录的常见方法有很多,但 log4js 提供了一些额外的功能,使其成为一个流行的选择:

  • 多种日志级别:支持不同级别的日志记录(如 tracedebuginfowarnerrorfatal),可以根据需求过滤输出的日志内容。
  • 日志轮换:通过配置,可以将日志按日期或大小进行轮换,有效避免日志文件过大,占用过多存储空间。
  • 日志压缩:日志轮换时,可以启用压缩功能,将日志文件以 .gz 格式保存,进一步节省磁盘空间。
  • 多种输出方式:可以将日志输出到控制台、文件、远程服务器等多种目标,满足不同的需求。

安装 log4js

首先,我们需要在项目中安装 log4js 库。可以通过以下命令来安装:

npm install log4js

配置 log4js

在使用 log4js 之前,首先需要配置日志记录器。以下是一个示例配置,其中包括日志输出到控制台和文件,文件按日期进行轮换,并设置日志保留天数和压缩。

示例代码:

const log4js = require("log4js");// 配置日志记录器
log4js.configure({appenders: {out: { type: "stdout" }, // 输出到控制台app: {type: "file", // 使用 file appender 进行文件输出filename: "logs/app.log", // 日志文件路径(不需要扩展名,自动添加)pattern: "yyyy-MM-dd", // 日志文件轮换的模式,按天轮换alwaysIncludePattern: true, // 始终在文件名中添加日期后缀daysToKeep: 90, // 保留最近 90 天的日志文件compress: true, // 启用日志文件压缩(.gz 格式)},},categories: {default: { appenders: ["out", "app"], level: "info" }, // 设置日志级别和输出方式},
});// 获取记录器
const logger = log4js.getLogger();// 记录不同级别的日志
logger.trace('This is a trace log');
logger.debug('This is a debug log');
logger.info('This is an info log');
logger.warn('This is a warn log');
logger.error('This is an error log');
logger.fatal('This is a fatal log');

配置解析:

  1. stdout:将日志输出到控制台,方便开发人员实时查看程序的运行状态。
  2. file:将日志输出到文件,文件路径为 logs/app.log。日志文件会按天进行轮换,并且每个文件名都会包含日期后缀(例如:app-2024-12-23.log)。
  3. pattern: "yyyy-MM-dd":指定日志文件的轮换模式,这里设置为按天轮换。
  4. alwaysIncludePattern: true:确保日志文件名始终包含日期后缀。
  5. daysToKeep: 90:保留最近 90 天的日志文件,超过 90 天的日志文件会自动删除。
  6. compress: true:启用日志压缩功能,日志文件会以 .gz 格式保存,以节省磁盘空间。

日志级别

log4js 中,有六个主要的日志级别,分别是:

  • trace:最细粒度的日志,通常用于记录非常详细的调试信息。
  • debug:调试信息,记录开发过程中的一些变量和流程。
  • info:常规信息,用于记录程序的正常运行状态。
  • warn:警告信息,记录潜在的问题,通常是应用程序的异常或错误,但并不会导致程序崩溃。
  • error:错误信息,用于记录程序中的异常和错误。
  • fatal:致命错误,记录会导致程序崩溃或无法继续运行的问题。

根据你的需求,你可以选择不同的日志级别来记录信息。例如,如果你只想记录程序正常运行的状态,可以将日志级别设置为 info,而如果你需要调试一些问题,可以使用 debugtrace 级别。

如何使用日志记录器

在配置完 log4js 后,可以通过 getLogger 获取日志记录器,并使用不同的级别来记录日志:

// 获取记录器
const logger = log4js.getLogger();// 记录不同级别的日志
logger.trace('This is a trace log');   // 最细粒度的日志
logger.debug('This is a debug log');   // 调试信息
logger.info('This is an info log');    // 常规信息
logger.warn('This is a warn log');     // 警告信息
logger.error('This is an error log');  // 错误信息
logger.fatal('This is a fatal log');   // 致命错误

日志级别使用场景:

  • trace:用于记录非常详细的调试信息,适用于调试代码时需要追踪每一步执行过程。
  • debug:记录开发过程中常见的变量值和执行路径,帮助开发人员理解程序的运行状态。
  • info:记录常规的运行状态,如程序启动、任务完成等。
  • warn:用于记录警告信息,提醒开发人员注意潜在的问题。
  • error:记录错误信息,通常用于捕捉异常和错误。
  • fatal:记录致命错误信息,通常表示程序无法继续运行,需要立即修复。

日志文件轮换与压缩

在生产环境中,日志文件可能会迅速增长,导致占用大量磁盘空间。log4js 提供了日志文件轮换功能,可以根据配置自动将日志文件按日期或大小进行轮换。通过配置 daysToKeepcompress,你可以轻松管理日志文件的存储和压缩。

  • daysToKeep: 90:日志文件最多保存 90 天,超过这个时长的日志文件会被删除。
  • compress: true:启用日志文件压缩功能,日志文件会被压缩为 .gz 格式,减少磁盘占用。

总结

通过 log4js,你可以在 Node.js 中方便地实现日志记录,并根据不同的需求灵活配置日志输出方式和轮换策略。本文通过一个示例介绍了如何配置 log4js,记录不同级别的日志信息,并展示了日志轮换和压缩的配置。无论是在开发环境调试,还是在生产环境监控应用,log4js 都是一个非常有效的日志工具。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/857962.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Zed编辑器-Win中文汉化版(持续更新)

Zed编辑器-Win中文汉化版 介绍Zed 是一款专为团队协作设计的代码编辑器,由 Atom 编辑器的原作者主导开发。Zed 的核心目标是为开发者提供一个高效、流畅、且直观的编程环境,特别强调实时协作和团队合作。该编辑器由 Rust 语言编写,并内置了 rust-analyzer,主打“高性能”。…

CentOS系统搭建K8s集群

前情概要 关于在虚拟机中centos系统搭建k8s集群,前前后后花了很多个白天黑夜才搞定,采用不同的搭建方式搭建集群次数至少10次以上,期间看了无数文章和视频,也踩过无数坑,很多视频、文章的安装教程都存在一些差别,有些时候可能因为k8s安装版本不同或者缺少某些必要的设置导…

中台建设为什么需要领域驱动设计

一、数字化转型 数字化转型是企业能力全面体系化,系统化,数据化提升的过程,这种提升包括了技术能力,业务能力,组织架构合理性等多方面的提升。而随着多年来海量高频业务的发展,技术也在推动着持续进步,并且越来越多的技术方案趋向成熟,类似于阿里巴巴,腾讯,美团等,…

某小程序sign关键字逆向分析

声明 本文章所有内容仅用于学习交流,严禁用于其他目的。文中不提供完整代码,抓包内容、敏感网址及数据接口等均已脱敏处理。严禁将相关内容用于商业用途和非法用途,否则由此产生的一切后果与作者无关。未经许可,禁止转载本文,禁止修改后二次传播。擅自使用本文讲解的技术导…

乌鸡国

1-队伍进入副本以后,走到下图分岔点离队,每人负责一条线路,寻找树妖。2-寻找仙人,可以按照1的策略继续反方向走回去找仙人。3-寻找完仙人以后,会要求帮助国王清理荆棘木,五个号散开清理完即可。 4-进入皇宫,击杀拘灵妖怪、缚仙妖怪、囚神妖怪,需要在12回合内击杀三个妖…

梦幻神器-起-泪痕碗之念-2星

1-该任务需要5个随机指定三级药、7个2级家具,其中2级家具可以提前准备,三级药为NPC随机指定,无法提前准备。 2-前面跟着流程跑,第一场战斗是"清风",需要先击杀小怪,主怪清风在第四回合以后会说"我们放水吧",说了以后才可以击杀主怪清风。3-击杀清风…

STM32F103 SPI配置(SSD1306)

有关SPI通信协议我们在《通信协议-SPI》已经进行了详细的介绍,因此这一节不再重复介绍。 一、软件/硬件SPI 想要控制STM32产生SPI方式的通讯,可以采用软件模拟或硬件SPI这两种方式。 1.1 软件模拟 所谓软件模拟,即直接使用CPU内核按照SPI协议的要求控制GPIO输出高低电平。 1…

梦幻神器-起-莫愁铃之恩-1星

1-该任务需要提前准备5个三级药,金创药、佛光舍利子除外。 2-第一场战斗是击败地府守卫弟子,1星难度不大,注意"诡蝠之刑"的反伤即可,中了"诡蝠之刑"的单位可以适当防御。3-击杀地府守卫弟子以后跟着流程走,接下来需要给三个水晶注入灵气,需要先注入中…

我家一次用电超负荷时20A保险丝断了,但16A的空气开关却没有跳闸.

回答一: 转载自:https://zhidao.baidu.com/question/1970736314255432140.html这说明两者的保护时限不同。无论是保险丝还是空气开关,并不电流达到就立即跳,而且有一定的时间延时来积累热量,热量到了才会动作。 16A的空气开关没跳说明电流虽然超过20A,但时间很快,保险丝…

Easysearch Java SDK 2.0.x 使用指南(二)

在 上一篇文章 中,我们介绍了 Easysearch Java SDK 2.0.x 的基本使用和批量操作。本文将深入探讨索引管理相关的功能,包括索引的创建、删除、开关、刷新、滚动等操作,以及新版 SDK 提供的同步和异步两种调用方式。 SDK 的对象构建有两种方式 1. 传统的 Builder 方式 最基础的…

《docker高级篇(大厂进阶):2.DockerFile解析》包括:是什么、DockerFile构建过程解析、DockerFile常用保留字指令、案例、小总结

《docker高级篇(大厂进阶):2.DockerFile解析》包括:是什么、DockerFile构建过程解析、DockerFile常用保留字指令、案例、小总结@目录二、高级篇(大厂进阶)2.DockerFile解析2.1 是什么2.2 DockerFile构建过程解析2.3 DockerFile常用保留字指令2.4案例2.4.1自定义镜像mycento…