1616package feign ;
1717
1818import java .io .IOException ;
19+ import java .util .concurrent .TimeUnit ;
1920
2021import javax .inject .Inject ;
2122import javax .inject .Provider ;
@@ -42,26 +43,31 @@ static class Factory {
4243
4344 private final Client client ;
4445 private final Provider <Retryer > retryer ;
45- private final Wire wire ;
46+ private final Logger logger ;
47+ private final Logger .Level logLevel ;
4648
47- @ Inject Factory (Client client , Provider <Retryer > retryer , Wire wire ) {
49+ @ Inject Factory (Client client , Provider <Retryer > retryer , Logger logger , Logger . Level logLevel ) {
4850 this .client = checkNotNull (client , "client" );
4951 this .retryer = checkNotNull (retryer , "retryer" );
50- this .wire = checkNotNull (wire , "wire" );
52+ this .logger = checkNotNull (logger , "logger" );
53+ this .logLevel = checkNotNull (logLevel , "logLevel" );
5154 }
5255
53- public MethodHandler create (Target <?> target , MethodMetadata md ,
54- BuildTemplateFromArgs buildTemplateFromArgs , Options options , Decoder decoder , ErrorDecoder errorDecoder ) {
55- return new SynchronousMethodHandler (target , client , retryer , wire , md , buildTemplateFromArgs , options , decoder , errorDecoder );
56+ public MethodHandler create (Target <?> target , MethodMetadata md , BuildTemplateFromArgs buildTemplateFromArgs ,
57+ Options options , Decoder decoder , ErrorDecoder errorDecoder ) {
58+ return new SynchronousMethodHandler (target , client , retryer , logger , logLevel , md , buildTemplateFromArgs ,
59+ options , decoder , errorDecoder );
5660 }
5761 }
5862
5963 static final class SynchronousMethodHandler extends MethodHandler {
6064 private final Decoder decoder ;
6165
62- private SynchronousMethodHandler (Target <?> target , Client client , Provider <Retryer > retryer , Wire wire , MethodMetadata metadata ,
63- BuildTemplateFromArgs buildTemplateFromArgs , Options options , Decoder decoder , ErrorDecoder errorDecoder ) {
64- super (target , client , retryer , wire , metadata , buildTemplateFromArgs , options , errorDecoder );
66+ private SynchronousMethodHandler (Target <?> target , Client client , Provider <Retryer > retryer , Logger logger ,
67+ Logger .Level logLevel , MethodMetadata metadata ,
68+ BuildTemplateFromArgs buildTemplateFromArgs , Options options , Decoder decoder ,
69+ ErrorDecoder errorDecoder ) {
70+ super (target , client , retryer , logger , logLevel , metadata , buildTemplateFromArgs , options , errorDecoder );
6571 this .decoder = checkNotNull (decoder , "decoder for %s" , target );
6672 }
6773
@@ -79,18 +85,21 @@ private SynchronousMethodHandler(Target<?> target, Client client, Provider<Retry
7985 protected final Target <?> target ;
8086 protected final Client client ;
8187 protected final Provider <Retryer > retryer ;
82- protected final Wire wire ;
88+ protected final Logger logger ;
89+ protected final Logger .Level logLevel ;
8390
8491 protected final BuildTemplateFromArgs buildTemplateFromArgs ;
8592 protected final Options options ;
8693 protected final ErrorDecoder errorDecoder ;
8794
88- private MethodHandler (Target <?> target , Client client , Provider <Retryer > retryer , Wire wire , MethodMetadata metadata ,
89- BuildTemplateFromArgs buildTemplateFromArgs , Options options , ErrorDecoder errorDecoder ) {
95+ private MethodHandler (Target <?> target , Client client , Provider <Retryer > retryer , Logger logger ,
96+ Logger .Level logLevel , MethodMetadata metadata , BuildTemplateFromArgs buildTemplateFromArgs ,
97+ Options options , ErrorDecoder errorDecoder ) {
9098 this .target = checkNotNull (target , "target" );
9199 this .client = checkNotNull (client , "client for %s" , target );
92100 this .retryer = checkNotNull (retryer , "retryer for %s" , target );
93- this .wire = checkNotNull (wire , "wire for %s" , target );
101+ this .logger = checkNotNull (logger , "logger for %s" , target );
102+ this .logLevel = checkNotNull (logLevel , "logLevel for %s" , target );
94103 this .metadata = checkNotNull (metadata , "metadata for %s" , target );
95104 this .buildTemplateFromArgs = checkNotNull (buildTemplateFromArgs , "metadata for %s" , target );
96105 this .options = checkNotNull (options , "options for %s" , target );
@@ -114,15 +123,24 @@ public Object executeAndDecode(Object[] argv, RequestTemplate template)
114123 throws Throwable {
115124 // create the request from a mutable copy of the input template.
116125 Request request = target .apply (new RequestTemplate (template ));
117- wire .wireRequest (target , request );
126+
127+ if (logLevel .ordinal () > Logger .Level .NONE .ordinal ()) {
128+ logger .logRequest (target , logLevel , request );
129+ }
130+
118131 Response response ;
132+ long start = System .nanoTime ();
119133 try {
120134 response = client .execute (request , options );
121135 } catch (IOException e ) {
122136 throw errorExecuting (request , e );
123137 }
138+ long elapsedTime = TimeUnit .NANOSECONDS .toMillis (System .nanoTime () - start );
139+
124140 try {
125- response = wire .wireAndRebufferResponse (target , response );
141+ if (logLevel .ordinal () > Logger .Level .NONE .ordinal ()) {
142+ response = logger .logAndRebufferResponse (target , logLevel , response , elapsedTime );
143+ }
126144 if (response .status () >= 200 && response .status () < 300 ) {
127145 return decode (argv , response );
128146 } else {
0 commit comments