当前位置: 首页 > backend >正文

nodejs 封装方法将打印日志输出到指定文件

const path = require("node:path");
const fs = require("fs"); // node 内置模块
const util = require("util"); // node 内置模块
const {timestampToDate} = require("./dateFormat"); // 时间方法,返回指定格式的时间let appLogFile = path.join(__dirname, '../../app.log'); // 日志文件对当前文件的路径
if (!fs.existsSync(appLogFile)) {// 检测如果没有文件则创建fs.writeFileSync(appLogFile, '', 'utf8');
}// 创建可写流
const logFile = fs.createWriteStream(appLogFile, {flags: 'a'});// 保留原始的 logger.log
const originalConsoleLog = console.log;let log = function (...args) {try {// 获取调用栈信息const stack = new Error().stack.split('\n');// 通常第三个元素是调用log的地方(第一个是Error,第二个是log函数本身)const callerLine = stack[2] || '';// 提取文件路径和行号const match = callerLine.match(/\((.+):(\d+):(\d+)\)$/);let callerInfo = '';if (match) {const filePath = match[1];const lineNumber = match[2];// 只保留文件路径的最后两部分以减少长度const pathParts = filePath.split(path.sep);callerInfo = `[${pathParts.slice(-2).join('/')}:${lineNumber}] `;}// 格式化消息const message = args.map(arg => typeof arg === 'object' ? util.inspect(arg, {depth: null}) : arg).join('');// 写入文件,带时间和调用信息logFile.write(`[${timestampToDate(new Date(), "YYYY-MM-DD HH:mm:ss:SSS")}] ${callerInfo}${message}\n`);} catch (e) {originalConsoleLog('Error writing log file', e);}// 保持控制台输出originalConsoleLog.apply(logger, args);
}let logger = {log
}module.exports = logger;

输出的日志格式:

http://www.xdnf.cn/news/16954.html

相关文章:

  • mybatis-plus报错Caused by: java.sql.SQLException: 无效的列类型: 1111
  • 论文Review LIO Multi-session Voxel-SLAM | 港大MARS出品!体素+平面特征的激光SLAM!经典必读!
  • Spring Boot 应用结合 Knife4j 进行 API 分组授权管理配置
  • 【世纪龙科技】汽车自动变速器拆装虚拟实训软件
  • 国产化低代码平台如何筑牢企业数字化安全底座
  • Go语言 并发安全sync
  • Linux 磁盘管理
  • 如何选择一个容易被搜索引擎发现的域名?
  • 从零开始的云计算生活——项目实战
  • Perl 面向对象编程深入解析
  • 京东商品销量数据如何获取?API接口调用操作详解
  • AWS VPC Transit Gateway 可观测最佳实践
  • [特殊字符] Ubuntu 下 MySQL 离线部署教学(含手动步骤与一键脚本)
  • Java 课程,每天解读一个简单Java之正整数分解质因数
  • 在安卓中使用 FFmpegKit 剪切视频并添加文字水印
  • 05.Redis 图形工具RDM
  • io_getevents 和 io_pgetevents 系统调用及示例
  • 论文阅读:DMD蒸馏 | One-step Diffusion with Distribution Matching Distillation
  • SaProt 模型部署与运行教程
  • 【AI】文档理解
  • ZStack Cloud 5.3.40正式发布
  • 大模型能力测评(提示词请帮我把这个项目改写成为python项目)
  • 人工智能之数学基础:几何型(连续型)随机事件概率
  • 深度学习周报(7.28~8.3)
  • 2025年6月电子学会青少年软件编程(C语言)等级考试试卷(七级)
  • 抖音全新推荐大模型RankMixer
  • p2p打洞
  • 后端研发转型爬虫实战:Scrapy 二开爬虫框架的避坑指南
  • [2025ICCV-目标检测方向]DuET:通过无示例任务算术进行双增量对象检测
  • 记一次v-if和key错误使用,导致vue2的内存爆炸修复!