先看效果

2025-08-26 09:52:19.834 [http-nio-10003-exec-10] INFO  c.x.c.logging.RequestLoggingFilter - HTTP请求: {headers={content-length=213, host=192.168.31.149:10003, content-type=application/json, connection=keep-alive, accept-encoding=gzip, deflate, br, user-agent=Apifox/1.0.0 (https://apifox.com), accept=*/*}, 调用方式=POST, 客户端IP=192.168.31.149, 接口路径=/test/exam/addData, body={"classificationId": 232,"examRecordId": 1223,"userId": 234
}, 传递参数=null}2025-08-26 10:00:48.678 [http-nio-10003-exec-2] WARN  com.zaxxer.hikari.pool.PoolBase - HikariPool-1 - Failed to validate connection com.mysql.cj.jdbc.ConnectionImpl@2871c902 (No operations allowed after connection closed.). Possibly consider using a shorter maxLifetime value.
2025-08-26 10:00:48.737 [http-nio-10003-exec-2] INFO  c.x.c.logging.RequestLoggingFilter - HTTP请求: {headers={host=192.168.31.149:10003, connection=keep-alive, accept-encoding=gzip, deflate, br, user-agent=Apifox/1.0.0 (https://apifox.com), accept=*/*}, 调用方式=GET, 客户端IP=192.168.31.149, 接口路径=/test/banner/list, 传递参数=null}

一、配置Maven依赖

<dependencies><!-- Spring Boot Web --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- MyBatis-Flex --><dependency><groupId>com.mybatis-flex</groupId><artifactId>mybatis-flex-spring-boot-starter</artifactId><version>1.8.6</version></dependency><!-- Logback JSON输出 --><dependency><groupId>ch.qos.logback.contrib</groupId><artifactId>logback-json-classic</artifactId><version>0.1.5</version></dependency><dependency><groupId>ch.qos.logback.contrib</groupId><artifactId>logback-jackson</artifactId><version>0.1.5</version></dependency><!-- 用于获取请求体 --><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId></dependency>
</dependencies>

二、配置properties资源包

生产环境等相关自己按需要配置

#logging
logging.level.com.mybatisflex:INFO

三、新增:src/main/resources/logback-spring.xml

<?xml version="1.0" encoding="UTF-8"?>
<configuration><appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"><encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder"><layout class="ch.qos.logback.contrib.json.classic.JsonLayout"><jsonFormatter class="ch.qos.logback.contrib.jackson.JacksonJsonFormatter"><prettyPrint>true</prettyPrint></jsonFormatter><timestampFormat>yyyy-MM-dd' 'HH:mm:ss.SSS</timestampFormat><appendLineSeparator>true</appendLineSeparator></layout></encoder></appender><appender name="PLAIN_CONSOLE" class="ch.qos.logback.core.ConsoleAppender"><encoder><pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern></encoder></appender><!-- 针对请求日志使用JSON格式 --><logger name="com.xiaoqiu.RequestLoggingFilter" level="INFO"><appender-ref ref="CONSOLE" /></logger><!-- MyBatis-Flex SQL日志 --><logger name="com.mybatis" level="INFO" /><!-- 根日志记录器 --><root level="INFO"><appender-ref ref="PLAIN_CONSOLE" /></root>
</configuration>

四、新增:com/你的包路径/config/requestLoggingFilter

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import org.springframework.web.filter.OncePerRequestFilter;
import org.springframework.web.util.ContentCachingRequestWrapper;
import org.springframework.web.util.ContentCachingResponseWrapper;import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Map;@Component
public class RequestLoggingFilter extends OncePerRequestFilter {private static final Logger logger = LoggerFactory.getLogger(RequestLoggingFilter.class);@Overrideprotected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)throws ServletException, IOException {// 包装请求和响应以支持多次读取ContentCachingRequestWrapper wrappedRequest = new ContentCachingRequestWrapper(request);ContentCachingResponseWrapper wrappedResponse = new ContentCachingResponseWrapper(response);try {filterChain.doFilter(wrappedRequest, wrappedResponse);} finally {// 记录请求信息logRequest(wrappedRequest);// 记录响应信息(可选)logResponse(wrappedResponse);// 将响应内容写回客户端wrappedResponse.copyBodyToResponse();}}private void logRequest(ContentCachingRequestWrapper request) {Map<String, Object> logData = new HashMap<>();// 基本信息logData.put("调用方式", request.getMethod());logData.put("接口路径", request.getRequestURI());logData.put("传递参数", request.getQueryString());logData.put("客户端IP", request.getRemoteAddr());// 请求头Map<String, String> headers = new HashMap<>();Enumeration<String> headerNames = request.getHeaderNames();while (headerNames.hasMoreElements()) {String headerName = headerNames.nextElement();headers.put(headerName, request.getHeader(headerName));}logData.put("headers", headers);// 请求参数Map<String, String[]> params = request.getParameterMap();if (!params.isEmpty()) {logData.put("请求参数", params);}// 请求体(JSON)byte[] content = request.getContentAsByteArray();if (content.length > 0) {try {String body = new String(content, request.getCharacterEncoding());logData.put("body", body);} catch (UnsupportedEncodingException e) {logger.warn("无法解析请求正文", e);}}logger.info("客户端请求: {}", logData);}private void logResponse(ContentCachingResponseWrapper response) {// 可选的响应日志记录逻辑}
}

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

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

相关文章

SegEarth-R1: Geospatial Pixel Reasoning via Large Language Model

摘要 遥感技术已成为理解环境动态、城市规划和灾害管理的关键。然而,传统的遥感工作流程通常依赖显式分割或检测方法,这些方法难以处理需要对空间上下文、领域知识和隐含用户意图进行推理的复杂隐式查询。受此启发,我们提出了一项新任务——地理空间像素推理,该任务允许隐…

CRMEB标准版PHP移动应用微信开放配置及商城后台配置教程(附步骤)

APP配置内容主要围绕微信开放平台里的移动应用来配置;开发平台地址为:https://open.weixin.qq.com/ 1. 登录开发平台创建【移动应用】点击创建移动应用 2. 进入创建页面后根据页面提示填写对应信息 在是否上架的地方可以先选择否&#xff1b; 3.填写平台信息 根据自身需求勾选…

jQuery 从入门到实践:基础语法、事件与元素操作全解析

个人主页&#xff1a;♡喜欢做梦 欢迎 &#x1f44d;点赞 ➕关注 ❤️收藏 &#x1f4ac;评论 目录 ​编辑 ⛅️定义 &#x1f353;引入依赖 ​编辑⛅️语法 &#x1f351;基础语法 &#x1f351;选择器 &#x1f351;jQuery事件 ⛅️操作 &#x1f350;添加操作…

野火STM32Modbus主机读取寄存器/线圈失败(二)-解决CRC校验错误

文章目录前情提要问题背景CRC校验失败问题现象原始问题数据问题分析1. CRC校验算法验证2. 手动计算验证问题解决思路问题解决根本原因解决方式1解决方式2重新编译测试前情提要 在自己的开发板上移植了野火的modbus主机程序并尝试使用。 问题背景 我使用STM32显示板作为Modbu…

从协作机器人到智能协作机器人:工业革命的下一跳

从协作机器人到智能协作机器人&#xff1a;工业革命的下一跳 文章目录从协作机器人到智能协作机器人&#xff1a;工业革命的下一跳摘要1️⃣ 协作机器人&#xff08;Cobot&#xff09;&#xff1a;工业柔性化的催化剂核心特点典型应用2️⃣ 智能机器人&#xff1a;赋予机器“思…

49个Docker自动化脚本:覆盖全场景运维,构建高可用容器体系

一、容器生命周期管理&#xff08;1-25&#xff09;&#xff1a;从创建到自愈的全流程自动化 1. 自动化容器创建脚本&#xff08;可复用配置&#xff09; 适用场景&#xff1a;快速创建标准化容器&#xff08;如Nginx、Redis&#xff09;&#xff0c;无需重复编写docker run命令…

Linux(二) | 文件基本属性与链接扩展

个人主页-爱因斯晨 文章专栏-Linux 最近学习人工智能时遇到一个好用的网站分享给大家&#xff1a; 人工智能学习 文件属性 看懂文件属性 在Linux中我们可以使用ll或者ls-l命令来显示一个文件的属性以及文件所属的用户和组。如&#xff1a; rootVM-24-17-ubuntu:~# cd / rootV…

MaxCompute MaxFrame | 分布式Python计算服务MaxFrame(完整操作版)

MaxCompute MaxFrame评测 | 分布式Python计算服务MaxFrame&#xff08;完整操作版&#xff09;前言MaxCompute MaxFrame服务开通开通 MaxCompute 服务开通 DataWorks 服务资源准备创建 DataWorks 工作空间创建 MaxCompute 项目创建MaxCompute数据源绑定数据源或集群创建MaxComp…

[机械结构设计-48]:机械工程师的岗位要求

机械工程师的岗位要求涵盖学历、专业知识、技能水平、工作经验、软件应用、综合能力、沟通协作、职业规范与持续学习等多个维度&#xff0c;具体如下&#xff1a;学历要求&#xff1a;通常要求本科及以上学历&#xff0c;专业背景为机械工程、自动化、材料工程等相关专业。部分…

3446. 按对角线进行矩阵排序

Problem: 3446. 按对角线进行矩阵排序 文章目录思路解题过程复杂度Code思路 发现每条对角线行号减列号是一个定值。 设ki-jn&#xff0c;i0,jn-1时&#xff0c;k1&#xff1b;im-1&#xff0c;j0时&#xff0c;kmn-1。 解题过程 遍历对角线&#xff0c;找出最小和最大列&#x…

疯狂星期四文案网第53天运营日记

网站运营第53天&#xff0c;点击观站&#xff1a; 疯狂星期四 crazy-thursday.com 全网最全的疯狂星期四文案网站 运营报告 今日访问量 必应的关键词排名还可以&#xff0c;自然流量过来的创新高了&#xff0c;这周没有掘金大佬给我宣传&#xff0c;全是自然流量过来的 今日…

【Docker基础】Docker-compose进阶配置:环境变量与配置隔离完全指南

目录 前言 1 Docker-compose环境变量基础 1.1 环境变量的作用与优势 1.2 环境变量的作用范围 2 .env文件的核心用法 2.1 .env文件基础语法 2.2 变量引用与替换 2.3 多环境配置策略 3 高级配置技巧 3.1 环境变量优先级 3.2 条件配置与模板 3.3 安全实践 4 案例&…

习题答案 |《数据结构(C语言版第4版)》人民邮电出版社,李云清杨庆红等,2023年8月

李云清杨庆红等&#xff0c;《数据结构&#xff08;C语言版第4版&#xff09;》&#xff0c;人民邮电出版社&#xff0c;2023年8月 上海电力大学2025年专升本上岸学长经验分享&#xff08;普通考生&#xff09;-免费赠送25年电力考试真题&#xff01;&#xff01;&#xff01;…

Chrome紧急修复AI发现的ANGLE高危漏洞CVE-2025-9478

近日&#xff0c;谷歌为Chrome稳定版发布关键安全更新&#xff0c;修复了ANGLE&#xff08;支撑WebGL及其他渲染任务的图形引擎&#xff09;中的释放后重用&#xff08;use-after-free&#xff09;漏洞。该漏洞编号为CVE-2025-9478&#xff0c;于2025年8月11日被发现——发现者…

8.28作业

1.提示并输入一个字符串&#xff0c;统计该字符中大写、小写字母个数、数字个数、空格个数以及其他字符个数#include <iostream>using namespace std;int main() {string buf;cout << "输入字符串" << endl;getline(cin,buf);int capital 0,lower…

copy-to-clipboard 网站复制粘贴 三分钟入门

目录 一、介绍和安装 &#xff08;1&#xff09;介绍 &#xff08;2&#xff09;安装 二、示例 &#xff08;1&#xff09;示例效果演示 &#xff08;2&#xff09;示例视频演示 &#xff08;3&#xff09;示例代码 一、介绍和安装 &#xff08;1&#xff09;介绍 copy…

Python 多版本环境治理理念驱动的系统架构设计——三维治理、四级隔离、五项自治 原则(路径治理升级修订 V 2.0 版)

Python 多版本环境治理理念驱动的系统架构设计 ——三维治理、四级隔离、五项自治 原则&#xff08;路径治理升级修订 V 2.0 版&#xff09; Python 多版本环境治理理念驱动的系统架构设计&#xff1a;三维治理、四级隔离、五项自治 原则 V1.0 版 &#x1f4da; 系列文章导航 …

Ubuntu Server 快速部署长安链:基于 Go 的智能合约实现商品溯源

文章目录简介智能合约语言智能合约上链管理开发环境准备长安链官网官方源码仓库官方文档官方 Docker 镜像仓库部署管理平台登录管理平台快速生成证书新建区块链链配置文件订阅长安链项目编译打包&#xff08;商品溯源示例&#xff09;部署合约编辑合约上链管理生产商品运输商品…

德克西尔氢气探测器:工业安全守护核心

​ ​引言&#xff1a;氢气泄漏隐患下&#xff0c;谁来守住工业安全防线&#xff1f; 2024年某化工园区因氢气管道阀门老化&#xff0c;泄漏气体未及时被检测&#xff0c;遇静电引发小型爆炸&#xff0c;造成设备损毁与停产损失——这类事故在新能源、化工、冶金等依赖氢气的…

电商高并发稳赢指南:ZKmall开源商城微服务架构的实战拆解

在电商行业&#xff0c;高并发场景&#xff08;如秒杀活动、节日大促&#xff09;对系统稳定性的考验尤为严峻。据阿里云 2024 年电商技术白皮书显示&#xff0c;采用微服务架构的电商系统在峰值流量下的稳定性比单体架构高 4.2 倍&#xff0c;故障恢复时间缩短 75%。ZKmall 开…