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

express中使用morgan打印请求数据日志文件,按日期分割

使用morgan可以打印日志,但是要分割日志文件就需要使用file-stream-rotator,下面介绍使用方法:

1.安装2个依赖

npm i morgan file-stream-rotator

2.在入口文件app.js中引入相关插件

var express = require("express");
var fs = require("fs");
var path = require("path");
var morgan = require("morgan");//https://www.npmjs.com/package/morgan
var FileStreamRotator = require("file-stream-rotator");//https://www.npmjs.com/package/file-stream-rotator
var app = express();

3.使用插件打印日志

function getTime() {var d = new Date();return d.toLocaleString() + "." + d.getMilliseconds();
}
// 自定义的 token 来获取请求头数据
morgan.token("auth", function (req, res) {return req.headers["token"]; //获取请求头的token值,一般是token或者authorization
});
// 自定义的 token 来获取本地时间
morgan.token("local-time", getTime);
// 自定义 token 来获取请求体
morgan.token("request-body", function (req, res) {return JSON.stringify(req.body);
});
// 自定义 token 来记录响应体,需要下面的中间件配合才能获取到
morgan.token("response-body", (req, res) => {return res.body || "";
});
// 自定义中间件来捕获响应体
app.use(function (req, res, next) {const originalSend = res.send.bind(res); // 暂存原始的 end 方法res.send = function (body) {res.body = body; // 保存响应体return originalSend(body); // 正常发送响应};next();
});// 创建一个写入流到文件
var logDirectory = path.join(__dirname, "../logs");//根据个人需要设置文件存放位置
if (!fs.existsSync(logDirectory)) {fs.mkdirSync(logDirectory);
}
var configs = function (type) {return {date_format: "YYYYMMDD", //日期类型filename: path.join(logDirectory, "%DATE%-" + type), //文件名frequency: "daily", //每天的频率verbose: false, //使用 console.log 在事件发生时提供额外的信息。默认值为 false。extension: ".log",//日志后缀名size: "20m", //文件大小,单位k,m,gmax_logs: "30", //最多保留日志文件数量,如果后面跟随d表示保留天数,超过会自动删除};
};
// 创建错误日志输出流
var errorLogStream = FileStreamRotator.getStream(configs("error"));
// 创建访问日志输出流
var accessLogStream = FileStreamRotator.getStream(configs("access"));//如果需要将代码中console.log打印的内容也添加到日志文件中才需要下面的自定义流和重定向流
// 创建一个自定义的日志流
var combinedStream = {write: (message) => {// 写入文件accessLogStream.write(message);// 同时输出到控制台// process.stdout.write(message);},
};
// 重定向 console.log 到自定义日志流
var originalConsoleLog = console.log;
console.log = function (message) {// 将消息写入日志文件combinedStream.write(`${getTime()} ${JSON.stringify(message)}\n`);// 同时输出到控制台//   originalConsoleLog.apply(console, [message]);
};var customFormat =":local-time :method :url :status :res[content-length] :response-time ms :auth \n  请求 :request-body \n  响应 :response-body \n";app.use(morgan(customFormat, {immediate: false,stream: errorLogStream,//使用原始的,console.log不会输出到日志文件skip: function (req, res) {return res.statusCode < 400; //code >= 400不过滤},})
);
app.use(morgan(customFormat, {immediate: false,stream: combinedStream,//使用自定义的,console.log会输出到日志文件skip: function (req, res) {//可以根据res.statusCode<400,req.method === 'GET',req.url === '/getUserInfo'判断是否过滤var arr = [".js", ".css", ".png", ".jpg"];return arr.some(function (item) {return req.url.indexOf(item) > -1;});},})
);

相关文章:

express中使用morgan打印请求数据日志文件,按日期分割

使用morgan可以打印日志,但是要分割日志文件就需要使用file-stream-rotator,下面介绍使用方法: 1.安装2个依赖 npm i morgan file-stream-rotator 2.在入口文件app.js中引入相关插件 var express require("express"); var fs require("fs"); var pat…...

干货 | 2024 AI+智慧城市安全解决方案白皮书(免费下载)

导读&#xff1a;新型智慧城市是推动城市治理体系和治理能力现代化、提升城市居民幸 福感和满意度的新理念和新路径&#xff0c;也是网络强国建设和数字经济发展的重要载体。随着 AI 技术的不断发展和在智慧城市智领域广泛的应用&#xff0c;人们享受技 术红利的同时&#xff0…...

超越 React Query:探索更高效的数据请求策略

我们常常遇到组件间通信的难题。你是否也曾为如何优雅地在组件间传递信息而头疼&#xff1f;今天&#xff0c;我想和大家分享一个让我眼前一亮的解决方案——使用 alova。 跨组件触发请求的挑战 如果你正在构建一个电商应用&#xff0c;用户在更新了购物车后&#xff0c;需要…...

Scala trait

一.trait 基本使用 idea实例 二.实现单个特质 三.实现多个特质 idea实例 四.特质成员的处理方式...

AI大法之C语言哈希表算法比较两个文件去重

最近朋友在工作上遇到了一个问题&#xff0c;经常需要比对两个文件&#xff0c;筛选出文件中不同的订单号。比如有两个文件&#xff1a;计费.txt 和 受理.txt&#xff0c;文件中每一行都是一个订单号&#xff0c;需要找出计费.txt文件中有而受理.txt文件中没有的单号和计费.txt…...

Scala 提取器(Extractor)

Scala 提取器(Extractor) Scala 提取器(Extractor)是一个非常有用的特性,它允许你为任何类型定义自定义的解构赋值语法。在Scala中,提取器是一种用于从对象中提取值的工具,它可以帮助你以一种更直观和声明式的方式处理数据。本文将详细介绍Scala提取器的工作原理、使用场景…...

【主机漏洞扫描常见修复方案】:Tomcat安全(机房对外Web服务扫描)

文章目录 引言I SSL/TLS Not ImplementedTomcat 服务器 SSL 证书安装部署(JKS 格式)Tomcat 服务器 SSL 证书安装部署(PFX 格式)HTTP 自动跳转 HTTPS 的安全配置(可选)修复SSL证书版本低II 主机漏洞扫描常见修复方案Apache JServ protocol serviceSlow HTTP DEnial of Ser…...

MySQL数据库之——事务(Transaction)详解

一、MySQL 事务定义 MySQL 事务主要用于处理操作量大&#xff0c;复杂度高的数据。比如说&#xff0c;在银行管理系统中&#xff0c;用户张三向李四账户转账的操作&#xff0c;账户转账是一个完整的业务&#xff0c;最小的单元&#xff0c;不可再分&#xff0c;这样&#xff0c…...

LabVIEW提高开发效率技巧----事件日志记录

在LabVIEW开发中&#xff0c;集成事件日志记录系统是提升程序调试效率和确保系统运行稳定的关键步骤。通过记录关键操作和异常事件&#xff0c;开发人员可以快速定位问题、优化程序性能&#xff0c;并确保系统的稳定性和可靠性。 1. 事件日志的作用 事件日志是指在程序运行过…...

整合XXL-Job任务调度平台

创建数据库 tables_xxl_job.sql 引入依赖 <dependency><groupId>com.xuxueli</groupId><artifactId>xxl-job-core</artifactId><version>2.4.0</version> </dependency>编写配置文件 server:port: 8081xxl:job:admin:# 这…...

hi3536上ffmpeg带rtmp移植

1.下载ffmpeg-4.1.3版本源码包 用下面的脚本进行configure&#xff1a; ./configure \--target-oslinux \--prefix./libs/ \--enable-cross-compile \--archarm \--ccarm-hisiv500-linux-gcc \--cross-prefixarm-hisiv500-linux- \--nmarm-hisiv500-linux-nm \--enable-share…...

在PHP中,读取大文件

在PHP中&#xff0c;读取大文件可以采用以下几种方法&#xff1a; 1. 使用fopen和fread函数&#xff1a;这是最基本的文件读取方法&#xff0c;可以逐行读取大文件。首先使用fopen函数打开文件&#xff0c;然后使用fread函数指定读取的字节数&#xff0c;逐行读取文件内容并进…...

N-gram详解

文章目录 一、什么是N-gram?二、N-gram的种类三、优缺点PS&#xff1a;补充 一、什么是N-gram? 在自然语言处理中&#xff0c;n-gram是一种重要的文本表示方法。n-gram是指给定文本中连续的n个项目&#xff0c;这些项目可以是声音、单词、字符或者像素等。n-gram模型常常用于…...

电路中的电源轨及地的区别和处理

电源轨 VCC 通常代指正电源供电轨。在大多数数字和模拟电路中&#xff0c;VCC代表电路中的正电源端。VCC提供电路所需的正电压&#xff0c;通常是用来驱动晶体管、集成电路。 VDD 相对与VCC的正电源供应&#xff0c;VDD更常用于表示数字电路中的正电源引脚。VDD常见于集成电…...

k8s可以部署私有云吗?私有云部署全攻略

k8s可以部署私有云吗&#xff1f;K8S可以部署私有云。Kubernetes是一个开源的容器编排引擎&#xff0c;能够自动化容器的部署、扩展和管理&#xff0c;使得应用可以在各种环境中高效运行。通过使用Kubernetes&#xff0c;企业可以在自己的数据中心或私有云环境中搭建和管理容器…...

编辑器资源管理器

解释 EditorResMgr 是一个用于在 Unity 编辑器中加载资源的管理器。它通过 Unity 编辑器的 API (AssetDatabase) 进行资源加载&#xff0c;但仅在开发和编辑模式下可用&#xff0c;不能在最终发布的游戏中使用。这种工具通常用来在开发过程中快速加载编辑器中的资源&#xff0…...

高性能数据分析利器DuckDB在Python中的使用

DuckDB具有极强的单机数据分析性能表现&#xff0c;功能丰富&#xff0c;具有诸多拓展插件&#xff0c;且除了默认的SQL查询方式外&#xff0c;还非常友好地支持在Python、R、Java、Node.js等语言环境下使用&#xff0c;特别是在Python中使用非常的灵活方便。 安装 pip insta…...

IAR全面支持旗芯微车规级MCU,打造智能安全的未来汽车

中国上海&#xff0c;2024年10月18日 — 在全球汽车电子快速发展的今天&#xff0c;IAR与苏州旗芯微半导体有限公司&#xff08;以下简称“旗芯微”&#xff09;联合宣布了一项激动人心的合作——IAR Embedded Workbench for Arm 9.60.2版本现已全面支持旗芯微车规级MCU&#x…...

**深入浅出:TOGAF中的应用架构**

摘要&#xff1a; 在企业架构&#xff08;EA&#xff09;领域&#xff0c;TOGAF&#xff08;The Open Group Architecture Framework&#xff09;是一个广泛应用的框架。本文将带你深入了解TOGAF中的应用架构&#xff0c;帮助你理解其核心概念和实际应用。无论你是初学者还是有…...

Pytorch学习--DataLoader的使用

一、DataLoader简介 DataLoader官网 重要参数&#xff1a;画红框的参数 dataset: 作用&#xff1a;表示要加载的数据集。DataLoader通过该参数从数据集中读取数据。类型&#xff1a;Dataset&#xff0c;即PyTorch定义的Dataset类&#xff0c;用于封装数据并提供数据索引的功…...

2025年能源电力系统与流体力学国际会议 (EPSFD 2025)

2025年能源电力系统与流体力学国际会议&#xff08;EPSFD 2025&#xff09;将于本年度在美丽的杭州盛大召开。作为全球能源、电力系统以及流体力学领域的顶级盛会&#xff0c;EPSFD 2025旨在为来自世界各地的科学家、工程师和研究人员提供一个展示最新研究成果、分享实践经验及…...

TRS收益互换:跨境资本流动的金融创新工具与系统化解决方案

一、TRS收益互换的本质与业务逻辑 &#xff08;一&#xff09;概念解析 TRS&#xff08;Total Return Swap&#xff09;收益互换是一种金融衍生工具&#xff0c;指交易双方约定在未来一定期限内&#xff0c;基于特定资产或指数的表现进行现金流交换的协议。其核心特征包括&am…...

C++ 求圆面积的程序(Program to find area of a circle)

给定半径r&#xff0c;求圆的面积。圆的面积应精确到小数点后5位。 例子&#xff1a; 输入&#xff1a;r 5 输出&#xff1a;78.53982 解释&#xff1a;由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982&#xff0c;因为我们只保留小数点后 5 位数字。 输…...

pikachu靶场通关笔记22-1 SQL注入05-1-insert注入(报错法)

目录 一、SQL注入 二、insert注入 三、报错型注入 四、updatexml函数 五、源码审计 六、insert渗透实战 1、渗透准备 2、获取数据库名database 3、获取表名table 4、获取列名column 5、获取字段 本系列为通过《pikachu靶场通关笔记》的SQL注入关卡(共10关&#xff0…...

Spring AI与Spring Modulith核心技术解析

Spring AI核心架构解析 Spring AI&#xff08;https://spring.io/projects/spring-ai&#xff09;作为Spring生态中的AI集成框架&#xff0c;其核心设计理念是通过模块化架构降低AI应用的开发复杂度。与Python生态中的LangChain/LlamaIndex等工具类似&#xff0c;但特别为多语…...

基于IDIG-GAN的小样本电机轴承故障诊断

目录 🔍 核心问题 一、IDIG-GAN模型原理 1. 整体架构 2. 核心创新点 (1) ​梯度归一化(Gradient Normalization)​​ (2) ​判别器梯度间隙正则化(Discriminator Gradient Gap Regularization)​​ (3) ​自注意力机制(Self-Attention)​​ 3. 完整损失函数 二…...

SQL Server 触发器调用存储过程实现发送 HTTP 请求

文章目录 需求分析解决第 1 步:前置条件,启用 OLE 自动化方式 1:使用 SQL 实现启用 OLE 自动化方式 2:Sql Server 2005启动OLE自动化方式 3:Sql Server 2008启动OLE自动化第 2 步:创建存储过程第 3 步:创建触发器扩展 - 如何调试?第 1 步:登录 SQL Server 2008第 2 步…...

密码学基础——SM4算法

博客主页&#xff1a;christine-rr-CSDN博客 ​​​​专栏主页&#xff1a;密码学 &#x1f4cc; 【今日更新】&#x1f4cc; 对称密码算法——SM4 目录 一、国密SM系列算法概述 二、SM4算法 2.1算法背景 2.2算法特点 2.3 基本部件 2.3.1 S盒 2.3.2 非线性变换 ​编辑…...

【Ftrace 专栏】Ftrace 参考博文

ftrace、perf、bcc、bpftrace、ply、simple_perf的使用Ftrace 基本用法Linux 利用 ftrace 分析内核调用如何利用ftrace精确跟踪特定进程调度信息使用 ftrace 进行追踪延迟Linux-培训笔记-ftracehttps://www.kernel.org/doc/html/v4.18/trace/events.htmlhttps://blog.csdn.net/…...

aurora与pcie的数据高速传输

设备&#xff1a;zynq7100&#xff1b; 开发环境&#xff1a;window&#xff1b; vivado版本&#xff1a;2021.1&#xff1b; 引言 之前在前面两章已经介绍了aurora读写DDR,xdma读写ddr实验。这次我们做一个大工程&#xff0c;pc通过pcie传输给fpga&#xff0c;fpga再通过aur…...