带有功能区+ listOfServers和日志记录要求的Zuul代理

时间:2016-05-02 11:38:20

标签: spring-cloud netflix-zuul spring-cloud-netflix

您好我已将Zuul(spring-cloud-netflix)配置为使用功能区。

我能够看到哪些请求将发送到zuul,以及在向其添加功能区之前将哪些请求发送到日志中的相关端点。

在某些时候我添加了功能区&负载均衡功能。

现在我无法在日志中看到传出的req(从zuul到真实端点)请求。事情很好。没有错误。但我需要知道/记录Zuul代理中的incomingReq-> outgoingReq信息。我的意思是我需要路径路径信息(尤其是ip信息)。

有没有办法查看/获取此信息?我想在可能的情况下将其记录在过滤器中?

1 个答案:

答案 0 :(得分:2)

我找到了一种方法来做到这一点...... 希望它也可以帮助其他人。

import com.netflix.client.IResponse;
import com.netflix.zuul.ZuulFilter;
import com.netflix.zuul.context.RequestContext;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;

import java.net.URI;

@Component
public class PostFilter extends ZuulFilter {

    Logger auditLogger = LoggerFactory.getLogger("auditLogger");

    @Override
    public String filterType() {
        return "post";
    }

    @Override
    public int filterOrder() {
        return 1;
    }

    @Override
    public boolean shouldFilter() {
        return true;
    }

    @Override
    public Object run() {
        RequestContext ctx = RequestContext.getCurrentContext();
        URI ribbonResponseURI = ((IResponse) ctx.get("ribbonResponse")).getRequestedURI();
        AuditBean auditBean = (AuditBean) RequestContext.getCurrentContext().get("auditBean");
        auditBean.setIncomingURI(ctx.getRequest().getRequestURL().toString());
        auditBean.setOutgoingURI(ribbonResponseURI.toString());
        auditLogger.info("{}", auditBean.toJson());
        return null;
    }
}