以logger日志系统为实际功能,学习如何通过fs文件系统学习node.js有关文件系统的相关操作,在学习fs文件系统的同时,实现对node服务的运行日志进行存储
主要作用于记录后端服务的调用日志记录,以中间件身份进行使用或函数方式手动调用
根据 config.js 的默认配置体系,生成的日志将遵循严谨的时间轴自动归档排列,如下树状图所示:
日志存储文件夹{LogPath} # 根据包管理自适应的项目根目录└── log/ # 顶层总日志文件夹 (LogName)├── 2026-04 # 历史月份归档目录 (YYYY-MM)│ ├── 2026-04-30(01).txt # 每日日志分卷 1│ └── 2026-04-30(02).txt # 每日日志分卷 2 (因达到 100KB 大小限制触发自动切分)└── 2026-05 # 历史月份归档目录 (YYYY-MM)├── 2026-05-11(01).txt # 每日日志分卷 1└── 2026-05-12(02).txt # 当前系统正处于活跃写入状态的最新日志文件
在日志系统中,当新一天的日志或日志分卷发生截断时,需要使用 fs.writeFileSync 同步创建新的 txt 文本。使用fs.existsSync 进行判断文件存在性,防止重复创建或覆盖已有文件
import fs from"node:fs";// 判断文件是否存在,不存在则创建并写入初始内容if (!fs.existsSync(filePath)) { fs.writeFileSync(filePath, content || "", "utf-8");}提示:本项目中,日常向文件追加日志主要使用
fs.appendFileSync,该方法自带“若不存在则自动创建文件”。
日志的存储涉及按月份构建文件夹(例如:2026-05)。使用 fs.mkdirSync创建目录,并开启 recursive: true 配置来一次性创建缺失的多级连带目录。
import fs from"node:fs";// 递归创建所需的所有父级和目标目录结构if (!fs.existsSync(dirPath)) { fs.mkdirSync(dirPath, { recursive: true });}若需清除特定的过时日志或测试产生的日志文件,可使用 fs.unlinkSync。它会同步从文件系统中删除指定的目标文件
import fs from"node:fs";// 删除单个文件。需提前验证文件是否存在,否则会抛出异常if (fs.existsSync(filePath)) { fs.unlinkSync(filePath);}若需清理整个月份或测试子模块的嵌套目录结构,使用 fs.rmSync 方法
import fs from"node:fs";// 递归且强制删除目标目录及其中包含的所有嵌套文件与子目录if (fs.existsSync(dirPath)) { fs.rmSync(dirPath, { recursive: true, force: true });}Node文件系统https://node.org.cn/docs/latest/api/fs.html#fsrmsyncpath-options
本日志系统通过将上述的 fs文件系统 核心方法统一封装进 plugin/lee-logger 目录下相关文件内,实现了日志的写入、创建、删除等操作,便于通过txt文件查看服务运行日志。