Dubbo源码分析----过滤器之AccessLogFilter

本文分析了Dubbo中的AccessLogFilter如何记录请求信息。AccessLogFilter由Activate注解激活,当url包含accesslog属性时生效。invoke方法是过滤器触发的入口,如果accesslog为true或default,则使用日志框架写入日志。若accesslog为文件地址,init方法会初始化定时任务每5s执行一次LogTask,将日志写入指定文件。
摘要由CSDN通过智能技术生成

dubbo的accessLog可以记录请求信息,配置如下:

<dubbo:protocol accesslog="true" />

然后配置一下日志文件就OK了,具体百度一下,这里只分析一下其中的原理。

accessLog的处理是在filter中,具体为AccessLogFilter,看下类的定义

@Activate(group = Constants.PROVIDER, value = Constants.ACCESS_LOG_KEY)
public class AccessLogFilter implements Filter {
   
//....
}

类上有Activate注解,其中有两个属性,一个是group,值为provider,代表该filter对provider有效;另外一个是value,值为accesslog,根据扩展机制,代表当url中有accesslog属性,那么该Filter就会被激活,加入到过滤器链中。

接下来,分析一下调用过程,Filter触发入口是invoke方法

    public Result invoke(Invoker<?> invoker, Invocation inv) throws RpcException {
        try {
            String accesslog = invoker.getUrl().getParameter(Constants.ACCESS_LOG_KEY);
            if (ConfigUtils.isNotEmpty(accesslog)) {
  //判断accesslog属性是否有值
                //从上下文中获取调用信息,拼装成字符串
                RpcContext context = RpcContext.getContext();
                String serviceName = invoker.getInterface().getName();
                String version = invoker.getUrl().getParameter(Constants.VERSION_KEY);
                String group = invoke
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值