DUBBO 日志过滤器,输出dubbo 接口调用入参、出参等信息(最新推荐)

 更新时间:2022年12月16日 11:45:08   作者:小目标青年  
这篇文章主要介绍了DUBBO 日志过滤器,输出dubbo 接口调用入参、出参等信息,首先自定义一个过滤器 DubboLoggerFilter.java,本文结合示例代码给大家讲解的非常详细,需要的朋友可以参考下

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;
 
    }
}

② 加上配置

到此这篇关于DUBBO 日志过滤器,输出dubbo 接口调用入参、出参等信息的文章就介绍到这了,更多相关DUBBO 日志过滤器内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • springboot启动的注意事项之不同包下有同样名字的class类问题

    springboot启动的注意事项之不同包下有同样名字的class类问题

    这篇文章主要介绍了springboot启动的注意事项之不同包下有同样名字的class类问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-06-06
  • java 异常之手动抛出与自动抛出的实例讲解

    java 异常之手动抛出与自动抛出的实例讲解

    这篇文章主要介绍了java 异常之手动抛出与自动抛出的实例讲解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-02-02
  • IDEA报错"Cannot resolve symbol"问题的解决办法

    IDEA报错"Cannot resolve symbol"问题的解决办法

    早上来了,打开idea发现注解等都变红报错can’t resolvesymbol,由于这个错之前也报过,所以记录一下,这篇文章主要给大家介绍了关于IDEA报错"Cannot resolve symbol"问题的解决办法,需要的朋友可以参考下
    2023-11-11
  • java打印出菱形图案实例详解

    java打印出菱形图案实例详解

    在本篇文章里小编给大家分享的是关于java打印出菱形图案实例详解,需要的朋友们可以学习下。
    2020-02-02
  • SpringBoot 2.x 整合Lombok的方法示例

    SpringBoot 2.x 整合Lombok的方法示例

    Spring Boot是非常高效的开发框架,lombok是一套代码模板解决方案,将极大提升开发的效率,这篇文章主要介绍了SpringBoot 2.x 整合Lombok的方法示例,感兴趣的小伙伴们可以参考一下
    2018-06-06
  • Java SpringBoot使用guava过滤器

    Java SpringBoot使用guava过滤器

    这篇文章主要介绍了Java SpringBoot使用guava过滤器,文章围绕主题展开详细的内容戒杀,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-09-09
  • Java 中synchronize函数的实例详解

    Java 中synchronize函数的实例详解

    这篇文章主要介绍了Java 中synchronize函数的实例详解的相关资料,希望通过本文能帮助到大家理解使用synchronize函数的使用方法,需要的朋友可以参考下
    2017-09-09
  • Java并发编程之原子变量与非阻塞同步机制

    Java并发编程之原子变量与非阻塞同步机制

    这篇文章主要介绍了Java并发编程之原子变量与非阻塞同步机制,本文讲解了非阻塞算法、悲观技术、乐观技术、CAS操作、原子变量、性能比较:锁与原子变量等内容,需要的朋友可以参考下
    2015-04-04
  • java方法通用返回结果集封装操作

    java方法通用返回结果集封装操作

    这篇文章主要介绍了java方法通用返回结果集封装操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-08-08
  • 在java中调用python脚本的三种方法

    在java中调用python脚本的三种方法

    实际工程项目中可能会用到Java和python两种语言结合进行,这样就会涉及到一个问题,就是怎么用Java程序来调用已经写好的python脚本呢,这篇文章主要给大家介绍了关于在java中调用python脚本的三种方法,需要的朋友可以参考下
    2023-09-09

最新评论