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;

    }
}

② 加上配置

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小目标青年

对你有帮助的话,谢谢你的打赏。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值