2016-05-02 4 views
1

こんにちは私はリボンで動作するZuul(spring-cloud-netflix)を設定しました。Zuulプロキシリボン+ listOfServersとロギングの必要性

リールを追加する前に、どのリクエストがzuulに来ているのか、そしてどのリクエストがログ内の関連するエンドポイントに送られているのかを確認することができました。

ある時点で、リボン&負荷分散機能が追加されました。

これで、ログ内の発信元(zuulから実際のエンドポイント)要求は見えません。物事は正常に動作しています。エラーはありません。しかし、私はZuulプロキシの内部でincomingReq-> outgoingReq情報を知り/ログに記録する必要があります。私はルートパス情報が必要であることを意味します(特にip情報の場合)。

この情報を見る/取得する方法はありますか?可能であればフィルタに記録したいのですか?

答えて

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

このAuditBeanクラスとは何ですか?どこからインポートしますか? – codesalsa

関連する問題