1
我的问题是关于应该打印出多少OkHttp日志。
在我的应用程序的某些屏幕上,有太多的API调用 - > logcat被淹没,所以我想限制/关闭日志,除了一次性调试如何提供2个Retrofit界面宽度不同的日志级别?
我是新来的匕首2和依赖注入,已经跟在this tutorial之后。
我有工作的下面,但我不知道是否有任何不好的做法存在或是否可以进一步改进:
(大约有20个改造API接口/在我的应用程序20个不同的端点)
@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
}
用法:
1)在大多数情况下,记录体不需要这样:
@Inject
Api1 api1;
2)。在一些情况下,需要记录体则:
@Inject
@Named("logging_full")
Api1 api2;
感谢@RobertEstivill,但你也错过了点:)我不关心包含/排除HTTP头。我关心的是应该打印出多少OkHttp日志。在某些屏幕上,有太多的API调用 - > logcat被泛滥,所以我想限制/关闭日志,除了一次性调试 – ericn
Header用作per/endpoint配置。当然,您也可以将所有请求属性的日志记录行为(例如:路径)。但具有外部配置的属性是更明显的选项。如果您需要在运行时更改行为,那么您将不得不坚持HttpLogginInterceptor实例并修改它的状态,以便在调用之间表现不同 –