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

通过gateway 打印日志全局控制日志

需求:

业务上经常需要打印日志,传统代码加日志,对代码侵入太强,不管是添加删除修改日志 都会改动代码,即使使用注解也需要添加注解,想实现且偶零侵入添加代码。

解决方法

gateway 自定义filter。
前置条件,项目中已经使用gateway 。

code


import lombok.extern.slf4j.Slf4j;
import org.springframework.cloud.gateway.filter.GatewayFilterChain;
import org.springframework.cloud.gateway.filter.GlobalFilter;
import org.springframework.core.Ordered;
import org.springframework.stereotype.Component;
import org.springframework.web.server.ServerWebExchange;
import reactor.core.publisher.Mono;
@Component
@Slf4j
public class MyGlobalFilter implements GlobalFilter, Ordered
{/*** 数字越小优先级越高* @return*/@Overridepublic int getOrder(){return 0;}private static final String BEGIN_VISIT_TIME = "begin_visit_time";//开始访问时间/***第2版,各种统计* @param exchange* @param chain* @return*/@Overridepublic Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {//先记录下访问接口的开始时间exchange.getAttributes().put(BEGIN_VISIT_TIME, System.currentTimeMillis());return chain.filter(exchange).then(Mono.fromRunnable(()->{Long beginVisitTime = exchange.getAttribute(BEGIN_VISIT_TIME);if (beginVisitTime != null){log.info("访问接口主机: " + exchange.getRequest().getURI().getHost());log.info("访问接口端口: " + exchange.getRequest().getURI().getPort());log.info("访问接口URL: " + exchange.getRequest().getURI().getPath());log.info("访问接口URL参数: " + exchange.getRequest().getURI().getRawQuery());log.info("访问接口时长: " + (System.currentTimeMillis() - beginVisitTime) + "ms");log.info("我是美丽分割线: ###################################################");System.out.println();}}));}}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Java通过GeoLite2-City.mmdb 进行IP信息查询地理定位和经纬度筛选。
  • java代理简单理解
  • 评估测试用例有效性 5个方面
  • 数学建模中常用的数据处理方法
  • c++:内存管理
  • Linux下使用arping检测IP地址是否冲突
  • 智慧园区管理系统建设方案(Word完整原件)
  • 双栈实现一个队列
  • 新手小白的pytorch学习第一弹-------张量
  • 生成日志系统和监控
  • 算法·高精度
  • C++的介绍与认识
  • 用JavaScript将 NCR(Numeric Character Reference)标记转换为对应字符的方法
  • 对称加密和非对称加密解析
  • 关于力扣150题目——逆波兰表达式求值Java实现的三种解法
  • axios请求、和返回数据拦截,统一请求报错提示_012
  • Java 23种设计模式 之单例模式 7种实现方式
  • JavaScript新鲜事·第5期
  • java取消线程实例
  • k8s如何管理Pod
  • Mithril.js 入门介绍
  • Mysql5.6主从复制
  • MySQL数据库运维之数据恢复
  • python大佬养成计划----difflib模块
  • Redis中的lru算法实现
  • supervisor 永不挂掉的进程 安装以及使用
  • Unix命令
  • vuex 笔记整理
  • 给新手的新浪微博 SDK 集成教程【一】
  • 记一次和乔布斯合作最难忘的经历
  • 树莓派 - 使用须知
  • 数据科学 第 3 章 11 字符串处理
  • 学习笔记:对象,原型和继承(1)
  • 译米田引理
  • media数据库操作,可以进行增删改查,实现回收站,隐私照片功能 SharedPreferences存储地址:
  • [地铁译]使用SSD缓存应用数据——Moneta项目: 低成本优化的下一代EVCache ...
  • LIGO、Virgo第三轮探测告捷,同时探测到一对黑洞合并产生的引力波事件 ...
  • mysql 慢查询分析工具:pt-query-digest 在mac 上的安装使用 ...
  • 没有任何编程基础可以直接学习python语言吗?学会后能够做什么? ...
  • 如何正确理解,内页权重高于首页?
  • #Datawhale AI夏令营第4期#AIGC文生图方向复盘
  • #我与Java虚拟机的故事#连载08:书读百遍其义自见
  • #我与Java虚拟机的故事#连载17:我的Java技术水平有了一个本质的提升
  • (2)nginx 安装、启停
  • (3)llvm ir转换过程
  • (C语言)二分查找 超详细
  • (超详细)语音信号处理之特征提取
  • (七)理解angular中的module和injector,即依赖注入
  • (一) storm的集群安装与配置
  • (转)详解PHP处理密码的几种方式
  • .\OBJ\test1.axf: Error: L6230W: Ignoring --entry command. Cannot find argumen 'Reset_Handler'
  • .DFS.
  • .NET Core 2.1路线图
  • .Net Core和.Net Standard直观理解
  • .NET 自定义中间件 判断是否存在 AllowAnonymousAttribute 特性 来判断是否需要身份验证