使用 Finagle 客户端时,我想将被调用的远程主机记录到 STDOUT。但据我所知,这是不可能的com.twitter.finagle.http.filter.LoggingFilter
;它的#format
(示例见下文)方法无法访问实际主机:
request.remoteHost()
返回0.0.0.0
request.remoteAddress()
返回一个基本上包含上述 IP 的对象request.host()
返回一个None
对象
我的第一个猜测是/是因为Finagle 的客户端负载平衡发生在堆栈的更深处,所以无法访问主机。
这是我使用的测试代码:
LoggingFilter<Request> loggingFilter = new LoggingFilter<>(
new Logger(this.getClass().getSimpleName(), java.util.logging.Logger.getLogger(this.getClass().getSimpleName())),
new LogFormatter<Request, Response>() {
@Override
public String format(Request request, Response reply, Duration replyTime) {
return null;
}
@Override
public String formatException(Request request, Throwable throwable, Duration replyTime) {
return null;
}
});
Service<Request, Response> service = Http.client().newService("localhost:8090,localhost:8091");
Future<Response> response = loggingFilter.andThen(service).apply(Request.apply("/profiles/me"));