java.lang.IllegalArgumentException:Log标记";okhttp3.mockwebserver.mockwebserver";超过23个字符的限制
有几点需要澄清,这不是一个重复的问题,因为有人建议:java.lang.IllegalArgumentException:Log标记";okhttp3.mockwebserver.mockwebserver";超过23个字符的限制,java,android,kotlin,okhttp,mockwebserver,Java,Android,Kotlin,Okhttp,Mockwebserver,有几点需要澄清,这不是一个重复的问题,因为有人建议: 这是由长日志标记名引起的“运行时崩溃”。i、 e.okhttp3.mockwebserver.mockwebserver,这不是IDE lint错误 此崩溃是由第三方依赖项(即MockWebServer)引起的。多亏了你养了一只虫子 我已经在回答中提供了我的解决方案 原始问题: 我正在使用Expresso和MockWebServer进行Android web服务测试,但是我遇到以下异常,它告诉我日志标记问题: “okhttp3.moc
- 这是由长日志标记名引起的“运行时崩溃”。i、 e.
,这不是IDE lint错误okhttp3.mockwebserver.mockwebserver
- 此崩溃是由第三方依赖项(即MockWebServer)引起的。多亏了你养了一只虫子
- 我已经在回答中提供了我的解决方案
原始问题: 我正在使用
Expresso
和MockWebServer
进行Android web服务测试,但是我遇到以下异常,它告诉我日志标记问题:
“okhttp3.mockwebserver.mockwebserver”超过了23个字符的限制
详细的堆栈跟踪如下所示:
2020-08-13 11:31:13.277 16901-17085/com.xxx.app I/okhttp.OkHttpClient:这是因为日志API不允许标记超过23个字符
您可以通过以下方式禁用lint检查,但您已收到警告
为了更好地了解,请访问:
在深入研究MockWebServer.kt
的源代码后,我找到了解决此问题的方法。在该文件中,有一个如下属性:
private val logger=logger.getLogger(MockWebServer::class.java.name)
MockWebServer::class.java.name
将返回完整的类名okhttp3.MockWebServer.MockWebServer
,显然,作为Android日志标记的名称已经超过23个字符。修复程序正在使用Kotlin反射替换logger属性。反射代码如下:
fun <T : Any> T.setPrivateProperty(variableName: String, data: Any): Any? {
return javaClass.getDeclaredField(variableName).let { field ->
field.isAccessible = true
field.set(this, data)
return@let field.get(this)
}
}
MockWebServer::class.java.simpleName
将返回一个较短的类名并修复该问题。这是否回答了您的问题?我的问题是,“okhttp3.mockwebserver.mockwebserver”
作为日志标记会导致异常,以及如何解决此问题或任何解决方法?我已经提出,我们已经解决了其他日志名称长度的问题issues@YuriSchimke谢谢这不是lint阶段的问题,这是一个运行时异常,会使测试无法正常执行。