使用过滤器对dubbo请求时参数返回值等做日志记录

新增过滤器

过滤器需要实现org.apache.dubbo.rpc.Filter

// 可以使用注解也可以使用xml格式配置
@Activate
public class DubboServiceLogFilter implements Filter {

    private final static String msg = ">>>>>线程ID:{%s}\r\n>>>>>请求参数:{%s}\r\n>>>>>请求方法:{%s}\r\n>>>>>请求时长:{%s毫秒},请求结果:{%s}";

    @Override
    public Result invoke(Invoker<?> invoker, Invocation invocation) throws RpcException {
        // 方法开始执行的时间
        long startTime = System.currentTimeMillis();

        // 全部请求参数
        Object[] objects = invocation.getArguments();
        // 请求参数
        Object[] paramObjects = null;

        if (objects != null && objects.length > 0) {
            //这里可以进行参数筛选
            paramObjects = new Object[objects.length];
            // 其他参数赋值到paramObjects
            System.arraycopy(objects, 0, paramObjects, 0, paramObjects.length);
        }

        String classMethod = invoker.getInterface() + "." + invocation.getMethodName();
        // 返回结果
        Result result = null;
        // 线程ID
        Long threadId = Thread.currentThread().getId();
        // 方法结束执行的时间
        long endTime;

        try {
            result = invoker.invoke(invocation);
        } catch (Exception e) {
            endTime = System.currentTimeMillis();
            System.out.println(String.format(msg, threadId, JSONObject.toJSON(paramObjects), classMethod, endTime - startTime, "请求异常,异常明细如下:"));
            e.printStackTrace();
            throw e;
        }
        endTime = System.currentTimeMillis();
        System.out.println((String.format(msg, threadId, JSONObject.toJSON(paramObjects), classMethod, endTime - startTime, result.getValue())));
        return result;
    }
}

或者采用xml配置,比如只对消费者生效。

<dubo:provider filter="DubboServiceLogFilter"/>

xml和注解二选一即可。

配置过滤器

1、在resources目录下新建META-INF/dubbo目录,若存在多环境切换,则可以配置在对应环境下(例:resources/test/META-INF/dubbo)

2、在该目录下文件名为 org.apache.dubbo.rpc.Filter 的文件

3、在文本内配置DubboServiceLogFilter=包路径.DubboServiceLogFilter(例如: com.****.filter.DubboServiceLogFilter)

之所以配置到META-INF/dubbo/ 这个目录,可以查询ExtensionLoader类

在这里插入图片描述

 

posted @ 2022-03-29 17:13  残城碎梦  阅读(357)  评论(0编辑  收藏  举报