DUBBO 日志过滤器,输出dubbo 接口调用入参、出参等信息(最新推荐)
作者:小目标青年 发布时间:2023-10-19 22:53:54
标签:DUBBO,过滤器,接口
Dubbo过滤器概述
Dubbo中的过滤器和Web应用中的过滤器的概念是一样的,提供了在服务调用前后插入自定义逻辑的途径。过滤器是整个Dubbo框架中非常重要的组成部分,Dubbo中很多功能都是基于过滤器扩展而来的。过滤器提供了服务提供者和消费者调用过程的拦截,即每次都执行RPC调用的时候,对应的过滤器都会生效。虽然过滤器的功能强大,但由于每次调用时都会执行,因此在使用的时候需要注意它对性能的影响。
过滤器的使用
一种方式是使用@Active注解默认启用;
一种方式是在配置文件中配置;
<!-- 消费方调用过程拦截 -->
<dubbo:reference filter="xxx, yyy" />
<!-- 消费方调用过程默认 * ,将拦截所有reference -->
<dubbo:consumer filter="xxx, yyy" />
<!-- 服务提供方调用过程拦截 -->
<dubbo:service filter="xxx, yyy" />
<!-- 服务提供方调用过程默认 * ,将拦截所有service -->
<dubbo:provider filter="xxx, yyy" />
下面看下DUBBO 日志过滤器,输出dubbo 接口调用入参、出参等信息
①自定义一个过滤器 DubboLoggerFilter.java
import org.apache.dubbo.rpc.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.alibaba.fastjson.JSON;
/**
* @Author: JCccc
* @Description: dubbo请求和响应拦截(记录请求参数和响应结果和时长)
* @Date: Create in 19:03 2021/1/26
*/
public class DubboLoggerFilter implements Filter {
protected Logger logger = LoggerFactory.getLogger(getClass());
/**
* rpc日志最长字符串
*/
private final static Integer MAX_LOG_LENGTH=5000;
/**
* rpc日志超过长度截取长度
*/
private final static Integer REMAINING_LOG_LENGTH=1000;
@Override
public Result invoke(Invoker<?> invoker, Invocation invocation) throws RpcException {
String methodName = invocation.getMethodName();
Object[] arguments = invocation.getArguments();
String className = invoker.getInterface().getName();
String callMethod = className + "." + methodName;
String argsJson = JSON.toJSONString(arguments);
logger.info("rpc接口callMethod:{}>>入参:{}", callMethod, argsJson);
long start = System.currentTimeMillis();
AsyncRpcResult result = (AsyncRpcResult)invoker.invoke(invocation);
if(result.hasException()){
logger.info("rpc接口callMethod:{},接口耗时:{},异常:{},", callMethod, System.currentTimeMillis() - start,result.getException().getMessage());
} else {
Object resultString = JSON.toJSON(result.getAppResponse().getValue());
if(resultString!=null&&resultString.toString().length()>MAX_LOG_LENGTH){
resultString=resultString.toString().substring(0,REMAINING_LOG_LENGTH)+"...";
}
logger.info("rpc接口callMethod:{},出参:{},接口耗时:{}", callMethod,resultString , System.currentTimeMillis() - start);
}
return result;
}
}
② 加上配置
来源:https://blog.csdn.net/qq_35387940/article/details/128338614


猜你喜欢
- 本文实例为大家分享了Android自定义星星可滑动评分控件的具体方法,供大家参考,具体内容如下此控件通过线性布局结合ImageView来实现
- Apache POI 是用Java编写的免费开源的跨平台的 Java API,Apache POI提供API给Java程式对Microsof
- 主要从以下十几个方面对Hibernate做总结,包括Hibernate的检索方式,Hibernate中对象的状态,Hibernate的3种检
- HttpResponse 讲解HttpServletResponse概述:在创建Servlet时会覆盖service()方法,或doGet(
- 本文实例为大家分享了C#基于Socket的TCP通信实现聊天室的具体代码,供大家参考,具体内容如下一、Socket(套接字)通信概念套接字(
- 本文实例为大家分享了java实现抽奖功能的具体代码,供大家参考,具体内容如下抽一个:输入抽奖人数,生成随机数字进行抽奖。比如:楼主抽幸运儿送
- android中的事件类型分为按键事件和屏幕触摸事件,Touch事件是屏幕触摸事件的基础事件,有必要对它进行深入的了解。 一个最简单的屏幕触
- 可以用抽象工厂模式来造车。车的品牌有很多,而且车的属性也不少,比如车的类型、排量、门的数量,等等。可以提炼出有关车的一个抽象类:public
- 本文实例讲述了Android编程实现Listview点击展开和隐藏的方法。分享给大家供大家参考,具体如下:代码较多,所以找关键点大家贴出来,
- 像360卫士的波浪球进度的效果,一般最常用的方法就是画线的方式,先绘sin线或贝塞尔曲线,然后从左到右绘制竖线,然后再裁剪圆区域。今天我这用
- 1.将本地jar包放入本地仓库。只需执行如下命令即可:mvn install:install-file -Dfile=D:/demo/fib
- 项目里使用了Feign进行远程调用,有时为了问题排查,需要开启请求和响应日志下面简介一下如何开启Feign日志:注:本文基于spring-b
- 前言上一篇已经对线程池的创建进行了分析,了解线程池既有预设的模板,也提供多种参数支撑灵活的定制。本文将会围绕线程池的生命周期,分析线程池执行
- 前言最近看了内部类后,总结一下,首先内部类嵌套在其他内部的类,根据出现的位置和关键字,可以分为以下四种类:成员内部类,静态内部类,方法内部类
- 在Spring Boot Actuator中提供很多像health、metrics等实时监控接口,可以方便我们随时跟踪服务的性能指标。Spr
- 目录前言Binder的使用模糊进程间调用Binder原理ioctlbinder初始化总结前言Binder是安卓中实现IPC(进程间通信的)常
- 一、月份英文简写DateTime dt = DateTime.Now;string MM = dt.AddMonths(-1).ToStri
- 本文实例讲述了C#使用GZipStream解压缩数据文件的方法。分享给大家供大家参考。具体分析如下:GZipStream用于从一个流读取数据
- 前言去年在公司参与了一个某某机场建设智能机场的一个项目,人脸登机是其中的一个功能模块,当时只是写了后台的接口,调用人脸识别设备的api,给闸
- Java画图 给图片底部添加文字标题需求给图片底部添加文字编号import java.awt.Color;import java.awt.F