Feign 配置全局日志存入mongo

1、开启feign日志

在application.yml 添加配置

feign:client:config:default:loggerLevel: FULL

2、日志实体类

@Document(collection = "feignLogs")
@Data
public class FeignLog {@Idprivate String id;private String method;private String url;private LocalDateTime requestTime;private String requestBody;private LocalDateTime responseTime;private String responseBody;private long elapsedTime;private int status;
}

3、定义一个 Spring Data MongoDB 存储库

public interface FeignLogRepository extends MongoRepository<FeignLog, String> {
}

自定义 Feign 日志记录器

import com.softding.dao.FeignLogRepository;
import com.softding.domain.log.FeignLog;
import feign.Logger;
import feign.Request;
import feign.Response;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.io.IOUtils;import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.time.LocalDateTime;@Slf4j
public class CustomFeignLogger extends Logger {private final FeignLogRepository feignLogRepository;public CustomFeignLogger(FeignLogRepository feignLogRepository) {this.feignLogRepository = feignLogRepository;}private FeignLog feignLog;@Overrideprotected void log(String configKey, String format, Object... args) {log.info(String.format(methodTag(configKey) + format, args));}@Overrideprotected void logRequest(String configKey, Level logLevel, Request request) {LocalDateTime requestTime = LocalDateTime.now();log.info("Request: {} {} {}", request.httpMethod(), request.url(), request.headers());log.info("Request Time: {}", requestTime);if (request.body() != null) {log.info("Request Body: {}", new String(request.body(), StandardCharsets.UTF_8));}FeignLog log = new FeignLog();log.setMethod(request.httpMethod().name());log.setUrl(request.url());log.setRequestTime(requestTime);log.setRequestBody(request.body() != null ? new String(request.body(), StandardCharsets.UTF_8) : null);feignLog = log;feignLogRepository.save(log);}@Overrideprotected Response logAndRebufferResponse(String configKey, Level logLevel, Response response, long elapsedTime) throws IOException {LocalDateTime responseTime = LocalDateTime.now();log.info("Response: {} {} {}", response.status(), response.reason(), response.headers());log.info("Response Time: {}", responseTime);log.info("Elapsed Time: {} ms", elapsedTime);byte[] bodyData = response.body() != null ? IOUtils.toByteArray(response.body().asInputStream()) : null;if (bodyData != null) {log.info("Response Body: {}", new String(bodyData, StandardCharsets.UTF_8));}FeignLog log = null;if (feignLog != null) {log = feignLog;}else {log = new FeignLog();}log.setResponseTime(responseTime);log.setResponseBody(bodyData != null ? new String(bodyData, StandardCharsets.UTF_8) : null);log.setElapsedTime(elapsedTime);log.setStatus(response.status());feignLogRepository.save(log);return response.toBuilder().body(bodyData).build();}
}

4、配置使用自定义日志记录器

import com.softding.dao.FeignLogRepository;
import feign.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class FeignConfig {@Autowiredprivate FeignLogRepository feignLogRepository;@BeanLogger feignLogger() {return new CustomFeignLogger(feignLogRepository);}
}

效果展示
在这里插入图片描述

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

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

相关文章

CTF-PWN-LLVM-【红帽杯-2021 simpleVM】

文章目录 参考检查逆向漏洞思路调试定位到PASS名exp 参考 https://bbs.kanxue.com/thread-274259.htm#msg_header_h2_6 http://www.blackbird.wang/2022/08/30/LLVM-PASS%E7%B1%BBpwn%E9%A2%98%E6%80%BB%E7%BB%93/ 检查 因为是用opt运行&#xff0c;加载动态库VMPASS.so的P…

开源模型应用落地-FastAPI-助力模型交互-WebSocket篇(四)

一、前言 使用 FastAPI 可以帮助我们更简单高效地部署 AI 交互业务。FastAPI 提供了快速构建 API 的能力,开发者可以轻松地定义模型需要的输入和输出格式,并编写好相应的业务逻辑。 FastAPI 的异步高性能架构,可以有效支持大量并发的预测请求,为用户提供流畅的交互体验。此外,F…

基于STM32的智能花园灌溉系统

目录 引言环境准备智能花园灌溉系统基础代码实现&#xff1a;实现智能花园灌溉系统 4.1 数据采集模块4.2 数据处理与分析4.3 控制系统实现4.4 用户界面与数据可视化应用场景&#xff1a;花园灌溉管理与优化问题解决方案与优化收尾与总结 1. 引言 智能花园灌溉系统通过使用ST…

普元EOS学习笔记-EOS8.3精简版安装

前言 普元EOS是优秀的高低开结合的企业应用软件开发框架。 普元&#xff1a;这是普元公司的名字&#xff0c;普元信息&#xff0c;上市公司哦&#xff0c;这里就不过多安利了。 EOS&#xff1a;普元公司的企业应用开发系统&#xff0c;开发语言是基于Java&#xff0c;技术框…

在 UBUNTU 22.04 上逐步构建 Postal SMTP 服务器

构建 Postal SMTP 服务器来发送批量电子邮件是电子邮件营销人员的不错选择。Postal 功能非常强大&#xff0c;并拥有大量开发人员的支持。它是一个用 JavaScript 和 Ruby 编写的开源邮件服务器脚本。它可用于构建内部 SMTP 服务器&#xff0c;就像 Mailgun、Sendgrid、Mailchim…

LangChain入门学习笔记(七)—— 使用检索提高生成内容质量

大模型训练使用的数据是开放的、广泛的&#xff0c;因此它显得更加的通用。然而在有些应用场景下&#xff0c;用户需要使用自己的数据使得大模型生成的内容更加贴切&#xff0c;也有时候用户的数据是敏感的&#xff0c;无法提供出来给大模型进行通用性的训练。RAG技术就是一种解…

LabVIEW项目外协时选择公司与个人兼职的比较

​在选择LabVIEW项目外协合作伙伴时&#xff0c;外协公司和个人兼职各有优劣。个人兼职成本较低且灵活&#xff0c;但在可靠性、技术覆盖面、资源和风险管理上存在不足。而外协公司拥有专业团队、丰富资源、完善的项目管理和风险控制&#xff0c;尽管成本较高&#xff0c;但能提…

基于单片机火灾自动报警系统设计

摘 要&#xff1a; 我国的火灾自动报警技术已经相对的较为成熟&#xff0c;随着信息技术的发展&#xff0c;网络化、信息化在火灾自动报警器上的应用也越来越多。无线通信的方式使得报警器本身可以方便的应用于大大小小的环境&#xff0c;例如工厂、社区和学校等等。通过对单片…

音频分离人声和伴奏可以实现吗?手机人声分离工具10款无偿分享!

随着科技的飞速发展&#xff0c;音频处理技术已经取得了显著的进步&#xff0c;其中音频分离人声和伴奏已成为现实。这一技术不仅为音乐制作人和音频工程师提供了便利&#xff0c;更为广大音乐爱好者提供了无限的创作可能性。本文将为大家分享10款手机人声分离工具&#xff0c;…

JVM原理(二):JVM之HotSpot虚拟机中对象的创建寻位与定位整体流程

1. 对象的创建 遇到new指令时 当Java虚拟机遇到一个字节码new指令时。 首先会去检查这个指令的参数是否能在常量池中定位到一个类的符号引用&#xff0c;并且检查这个符号引用代表的类是否被加载、解析和初始化过。 如果没有&#xff0c;那么必须执行类的加载过程(加载、检查…

npm安装依赖报错——npm ERR gyp verb cli的解决方法

1. 问题描述 1.1 npm安装依赖报错——npm ERR! gyp verb cli npm MARN deprecated axiosQ0.18.1: critical security vuLnerability fixed in v0.21.1. For more information, npm WARN deprecated svg001.3.2: This SVGO version is no Longer supported. upgrade to v2.x.x …

华为实训案例

案例下载 案例内包含空拓扑图、配置完整的拓扑、以及步骤脚本文档&#xff0c;可按需下载。 拓扑图 任务清单 &#xff08;一&#xff09;基础配置 根据附录1拓扑图、附录2地址规划表、附录3设备编号表&#xff0c;配置设备接口及主机名信息。 将所有终端超时时间设置为永不…

SOLIDWORKS卡顿反应慢怎么解决 慧德敏学

如果您的SOLIDWORKS软件运行缓慢或反应迟钝&#xff0c;可以尝试以下方法来提高性能和响应速度&#xff1a; 一、硬件检查与升级&#xff1a; 检查计算机硬件配置是否满足SOLIDWORKS官方推荐的要求&#xff0c;特别是CPU、内存和显卡。如果配置较低&#xff0c;考虑升级硬件以…

哨兵模式--哨兵节点的功能?

哨兵节点的主要功能有&#xff1a; 集群监控&#xff1a;监控 主、从节点的健康状况&#xff1b;自动切换主节点&#xff1a;当 Master 运行故障&#xff0c;哨兵启动自动故障恢复流程&#xff1a;从 slave 中选择一台作为新 master。通知&#xff1a;让 slave 执行 replicaof…

社交风潮塑造者:探索用户在Facebook的影响力

在当今数字化社会中&#xff0c;Facebook不仅是人们社交互动的主要平台&#xff0c;更是塑造社交风潮和文化趋势的重要力量。本文将从另一个角度深入探讨用户在Facebook上的影响力&#xff0c;探索其如何通过个人行为和互动&#xff0c;影响和改变社会的各个方面。 个人表达和内…

Cryptographic algorithms—(Green-Book)加密算法

Cryptographic algorithms—加密算法 9.2.3 加密算法9.2.3.1 概述9.2.3.2 哈希函数9.2.3.3 对称密钥算法9.2.3.3.1 概述9.2.3.3.2 加密和解密9.2.3.3.3 高级加密标准9.2.3.3.4 加密操作模式9.2.3.3.5 消息认证码9.2.3.3.6 密钥包装9.2.3.3.7 Galois/Counter Mode9.2.3.3.7.1 概…

Python中相关软件安装

1. python安装 1.下载地址 https://www.python.org/downloads/2.选择安装版本 1. Anaconda安装 安装地址 -- 清华大学镜像站点 https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/查看anaconda是否安装成功 2.conda安装好后&#xff0c;将镜像源修改为清华大学的镜像…

音频Balance源码总结

音频Balance源码总结 何为音频Balance&#xff1f; 顾名思义&#xff0c;Balance及平衡&#xff0c;平衡也就是涉及多方&#xff0c;音频左右甚至四通道&#xff0c;调节所有通道的音量比&#xff0c;使用户在空间内听到各个通道的音频大小不一&#xff0c;好似置身于真实环境…

vue 组件批量删除

element ui table表格中前面这个勾选框 对应 type"selection" 属性&#xff0c;绑定事件时selection-change,当你勾选全面的框时就会触发selection-change 对应的事件 绑定事件里面这样定义方法时&#xff0c;这个val 就是选中的时候那一行的数据&#xff0c;如下图…

【数据分享】《中国县城建设统计年鉴》2015-2022

而今天要免费分享的数据就是2015-2022年间出版的《中国县城建设统计年鉴》并以多格式提供免费下载。&#xff08;无需分享朋友圈即可获取&#xff09; 数据介绍 在中国快速城镇化的进程中&#xff0c;县城作为连接城市与乡村的重要节点&#xff0c;其建设与发展受到了广泛关注…