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

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.dtcms.com/a/314461.html

相关文章:

  • javacc实现简单SQL解析器
  • Llama 3词汇表揭秘:128,000个token解析:merges 是子词分词算法
  • 数据结构——单向链表部分操作及valgrind安装
  • Exporters | 安装mongodb_exporter
  • 数据分页异步后台导出excel
  • 【Ubuntu】请问,`ip -a`显示的“wlo1”是什么呀?
  • 笔试——Day28
  • 如何在 Ubuntu 24.04 上安装和配置 TFTP 服务器
  • 高防服务器租用的作用都有哪些?
  • 上海交通大学联合项目论文解读 | Hume 模型:视觉 - 语言 - 动作模型中引入系统2思维
  • 单片机51 day46
  • 部署 Kibana 8.2.2 可视化管理 Elasticsearch 8.2.2 集群
  • 【测试工程思考】测试自动化基础能力建设
  • 机试备考笔记 4/31
  • Linux开发利器:探秘开源,构建高效——基础开发工具指南(下)【make/Makefile】
  • 笛卡尔坐标
  • 机器学习笔记:集成学习/模型融合
  • usr/bin/ld链接报错undefined reference `av_frame_free(AVFrame**)‘等ffmpeg库报错
  • 【Spark征服之路-4.5-Spark-Streaming核心编程(三)】
  • debian 时间同步 设置ntp服务端 客户端
  • FastAPI入门:中间件、CORS跨域资源共享、SQL数据库
  • 【笔记】ROS1|4 Turtlebot3仿真Waffle循线跟踪【旧文转载】
  • Linux 磁盘管理与分区配置
  • open-webui pipelines报404, ‘Filter pipeline.exporter not found‘
  • 【测试工程思考】云平台测试可重用性和场景覆盖度的平衡术
  • 遮天(太古篇)
  • windows内核研究(软件调试-软件断点)
  • [QMT量化交易小白入门]-七十六、从tick数据中获取高频交易的量价背离信号
  • Java开发时出现的问题---语言特性与基础机制陷阱
  • 使用AI IDE编程,如Cursor