My concern is about how much OkHttp log should be printed out.
On certain screens of my app, there are way too many API calls --> logcat is flooded so I'd like to limit/ turn off logging there except for one-off debugging
I'm new to Dagger 2 and dependency injection, been following this tutorial.
I have the following which works but I'm not sure if there is any bad practice there or if it could be improved further:
(There are about 20 Retrofit API interfaces/ 20 different endpoints in my app)
@Module
public class NetModule {
private String mBaseUrl;
private final HttpLoggingInterceptor LOGGING_FULL = new HttpLoggingInterceptor().setLevel
(HttpLoggingInterceptor
.Level.BODY);
private final HttpLoggingInterceptor LOGGING_HEADERS = new HttpLoggingInterceptor().setLevel
(HttpLoggingInterceptor
.Level.HEADERS);
// Constructor needs one parameter to instantiate.
public NetModule(String baseUrl) {
this.mBaseUrl = baseUrl;
}
@Provides
@Singleton
OkHttpClient.Builder provideOkHttpClientBuilder() {
OkHttpClient.Builder builder = new OkHttpClient.Builder();
//...
return builder;
}
@Provides
@Singleton
Retrofit.Builder provideRetrofitBuilder() {
return new Retrofit.Builder()
.baseUrl(mBaseUrl);
}
@Provides
@Singleton
Api1 provideApi1(OkHttpClient.Builder okHttpClientBuilder, Retrofit.Builder retrofitBuilder) {
if (BuildConfig.DEBUG || !BuildConfig.FLAVOR.equals(FLAVOUR_PRODUCTION)) {
okHttpClientBuilder.addInterceptor(LOGGING_HEADERS);
}
return retrofitBuilder.client(okHttpClientBuilder.build()).build().create(Api1.class);
}
@Provides
@Named("logging_full")
@Singleton
Api1 provideApi1FullLog(OkHttpClient.Builder okHttpClientBuilder, Retrofit.Builder retrofitBuilder) {
if (BuildConfig.DEBUG || !BuildConfig.FLAVOR.equals(FLAVOUR_PRODUCTION)) {
okHttpClientBuilder.addInterceptor(LOGGING_FULL);
}
return retrofitBuilder.client(okHttpClientBuilder.build()).build().create(Api1.class);
}
//... Repeats for Api2, Api3, ..., Api20
}
Usage:
1) In most cases, logging body is not required so:
@Inject
Api1 api1;
2) In some cases, logging body is required then:
@Inject
@Named("logging_full")
Api1 api2;