gpt4 book ai didi

java.lang.IllegalArgumentException : Log tag "okhttp3.mockwebserver.MockWebServer" exceeds limit of 23 characters

转载 作者:行者123 更新时间:2023-12-02 13:26:56 25 4
gpt4 key购买 nike

一些要点澄清这不是有人建议的重复问题:

  • 这是由长日志标记名称引起的“ 运行时崩溃 ”。即okhttp3.mockwebserver.MockWebServer ,这是 不是 IDE lint 错误 .
  • 此崩溃是由第三方依赖引起的,即 MockWebServer。感谢 Yuri Schimke用于提出错误
    Fix android logging with MockWebServer .
  • 我在我的回答中提供了我的修复 https://stackoverflow.com/a/63388805/8034839 .

  • 原问题:
    我正在使用 Expresso 进行 Android Web 服务测试和 MockWebServer ,但是我遇到以下异常,告诉我日志标签问题:

    "okhttp3.mockwebserver.MockWebServer" exceeds limit of 23 characters.


    详细的堆栈跟踪如下:
    2020-08-13 11:31:13.277 16901-17085/com.xxx.app I/okhttp.OkHttpClient: <-- HTTP FAILED: java.net.SocketTimeoutException: timeout
    2020-08-13 11:31:13.280 16901-17346/com.xxx.app E/AndroidRuntime: FATAL EXCEPTION: MockWebServer TaskRunner
    Process: com.xxx.app, PID: 16901
    java.lang.IllegalArgumentException: Log tag "okhttp3.mockwebserver.MockWebServer" exceeds limit of 23 characters

    at android.util.Log.isLoggable(Native Method)
    at okhttp3.internal.platform.android.AndroidLog.androidLog$okhttp(AndroidLog.kt:66)
    at okhttp3.internal.platform.android.AndroidLogHandler.publish(AndroidLog.kt:39)
    at java.util.logging.Logger.log(Logger.java:615)
    at java.util.logging.Logger.doLog(Logger.java:636)
    at java.util.logging.Logger.log(Logger.java:725)
    at okhttp3.mockwebserver.MockWebServer$serveConnection$$inlined$execute$1.runOnce(TaskQueue.kt:224)
    at okhttp3.internal.concurrent.TaskRunner.runTask(TaskRunner.kt:116)
    at okhttp3.internal.concurrent.TaskRunner.access$runTask(TaskRunner.kt:42)
    at okhttp3.internal.concurrent.TaskRunner$runnable$1.run(TaskRunner.kt:65)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
    at java.lang.Thread.run(Thread.java:762)
    2020-08-13 11:31:13.293 16901-17346/com.xxx.app I/Process: Sending signal. PID: 16901 SIG: 9

    最佳答案

    在深入研究 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)
    }
    }

    里面 @before方法,使用 simpleName 设置记录器标签
    val mockWebServer = MockWebServer() // this is declared inside test class.

    @Before
    fun setup() {

    mockWebServer.setAndReturnPrivateProperty("logger",
    Logger.getLogger(MockWebServer::class.java.simpleName))

    mockWebServer.start(8080)
    }
    MockWebServer::class.java.simpleName将返回一个较短的类名并解决问题。

    关于java.lang.IllegalArgumentException : Log tag "okhttp3.mockwebserver.MockWebServer" exceeds limit of 23 characters,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63387807/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com