Java okhttp-拦截器-停止将非致命异常记录到Crashlytics
我在安卓应用程序中使用改型,这反过来意味着我在使用OkHttp。 我刚刚访问了Alpha,在我的crashlytics报告中看到一些非致命异常被记录。 所有这些都源于我的okhttp拦截器,然后记录的异常似乎在网络不稳定或连接中断等情况下都是有效的 我如何才能使这些异常不会注销到crashlytics,从而扰乱我对应用程序中发生的异常的看法Java okhttp-拦截器-停止将非致命异常记录到Crashlytics,java,android,retrofit2,interceptor,okhttp,Java,Android,Retrofit2,Interceptor,Okhttp,我在安卓应用程序中使用改型,这反过来意味着我在使用OkHttp。 我刚刚访问了Alpha,在我的crashlytics报告中看到一些非致命异常被记录。 所有这些都源于我的okhttp拦截器,然后记录的异常似乎在网络不稳定或连接中断等情况下都是有效的 我如何才能使这些异常不会注销到crashlytics,从而扰乱我对应用程序中发生的异常的看法 例外情况的一些例子: > Non-fatal Exception: javax.net.ssl.SSLHandshakeException Conn
例外情况的一些例子:
> Non-fatal Exception: javax.net.ssl.SSLHandshakeException
Connection closed by peer
okhttp3.internal.connection.RealConnection.connectTls (RealConnection.java:281)
okhttp3.internal.connection.RealConnection.establishProtocol (RealConnection.java:251)
okhttp3.internal.connection.RealConnection.connect (RealConnection.java:151)
okhttp3.internal.connection.StreamAllocation.findConnection (StreamAllocation.java:192)
okhttp3.internal.connection.StreamAllocation.findHealthyConnection (StreamAllocation.java:121)
okhttp3.internal.connection.StreamAllocation.newStream (StreamAllocation.java:100)
okhttp3.internal.connection.ConnectInterceptor.intercept (ConnectInterceptor.java:42)
okhttp3.internal.http.RealInterceptorChain.proceed (RealInterceptorChain.java:92)
okhttp3.internal.http.RealInterceptorChain.proceed (RealInterceptorChain.java:67)
okhttp3.internal.cache.CacheInterceptor.intercept (CacheInterceptor.java:93)
okhttp3.internal.http.RealInterceptorChain.proceed (RealInterceptorChain.java:92)
okhttp3.internal.http.RealInterceptorChain.proceed (RealInterceptorChain.java:67)
okhttp3.internal.http.BridgeInterceptor.intercept (BridgeInterceptor.java:93)
okhttp3.internal.http.RealInterceptorChain.proceed (RealInterceptorChain.java:92)
okhttp3.internal.http.RetryAndFollowUpInterceptor.intercept (RetryAndFollowUpInterceptor.java:120)
okhttp3.internal.http.RealInterceptorChain.proceed (RealInterceptorChain.java:92)
okhttp3.internal.http.RealInterceptorChain.proceed (RealInterceptorChain.java:67)
MY_INTERCEPTOR.intercept (AuthenticationInterceptor.java:30)
及
这是我的拦截器代码:
@Override
public Response intercept(Chain chain) throws IOException {
Request request = chain.request();
Response response = chain.proceed(request);
if( response.code() == HTTP_AUTHENTICATION_ERROR_CODE ){
Intent intent = new Intent(ACTION_LOGOUT_ACTION);
mContext.sendBroadcast(intent);
}
return response;
}
我知道我可以从“继续”调用中捕获任何IOException,但这不会打乱OkHttp对网络错误等的正确处理吗?
在调用Crashlytics时会记录非致命异常。logException(Exception)
在代码中显式记录
请阅读以下资料:
Crashlytics
for Android允许您在应用程序的捕获块中记录捕获的异常!要使用此功能,只需向catch块添加对Crashlytics.logException(Exception)
的调用:
try {
myMethodThatThrows();
} catch (Exception e) {
Crashlytics.logException(e);
// handle your exception here!
}
所有记录的异常将在Crashlytics仪表板中显示为“非致命”问题。您的问题摘要将包含您用于从崩溃中获取的所有状态信息,以及Android版本和硬件设备的故障
当您使用时,Crashlytics仅存储非致命异常
logException(),请参阅下面的截取器代码,它正在抛出
IOException,但异常在非致命的仪表板上不可见
异常部分,但我们不记录它
因此,如果要在非致命异常下记录异常,只需使用Crashlytics.logException()
和Crashlytics仅存储给定应用程序会话中最近的8个异常。如果您的应用程序在一个会话中抛出8个以上的异常,则旧的异常将丢失。只需在您的代码库中搜索Crashlytics.logException
,您肯定会在某个地方找到它。它只是从那里被记录下来的
否则在Response-Response=chain上出现任何异常代码>将导致应用程序崩溃:)
Wild guess:),您可能正在使用RxJava&在订阅服务器的onError(throwable:throwable)
中,您可能会像下面这样记录它
override fun onError(throwable: Throwable) {
Crashlytics.logException(throwable)
}
Crashlytics日志是否在没有此拦截器的情况下仍然显示?IIRC Crashlytics通常不会记录非致命异常,因此您似乎在代码库中的某个位置调用了Crashlytics.logException
,你应该在那里过滤你的异常。我没有在OkHttp拦截器中显式调用log exception,这是crashlytics引发和捕获异常的地方。我没有在OkHttp拦截器中显式调用log exception,这是crashlytics引发和捕获异常的地方。那么,我可能会进行改进在内部调用时,发现在更高的级别上出现了一个木材日志,但是很难跟踪,因为拦截器是我们代码中唯一显示在堆栈跟踪中的部分。但是是的,看来我们打电话给logexception,谢谢你提供的信息
@Override
public Response intercept(Interceptor.Chain chain) throws IOException {
Request request = chain.request();
long t1 = System.nanoTime();
logger.info(String.format("Sending request %s on %s%n%s",
request.url(), chain.connection(), request.headers()));
Response response = chain.proceed(request);
long t2 = System.nanoTime();
logger.info(String.format("Received response for %s in %.1fms%n%s",
response.request().url(), (t2 - t1) / 1e6d, response.headers()));
return response;
}
override fun onError(throwable: Throwable) {
Crashlytics.logException(throwable)
}