升级OkHttp MockWebServer后无日志,如何开启请求响应日志?
MockWebServer升级后日志丢失问题
问题现象
- Android项目中使用MockWebServer 3.14.9版本时,运行UI测试可在logcat中正常查看MockWebServer输出的请求、响应日志
- 升级到4.10.0版本后,logcat中无法看到任何MockWebServer输出的请求、响应相关日志
排查过程
- 查阅代码变更记录发现,某次版本迭代中MockWebServer的请求响应日志级别从
INFO被调整为FINE,截至最新正式版源码,该日志判断逻辑未发生变更,对应实现代码如下:
if (logger.isLoggable(Level.FINE)) { logger.fine( "${this@MockWebServer} received request: $request and responded: $response" ) }
- 调试时发现上述
logger.isLoggable(Level.FINE)判断结果始终为false,对照java.util.logging中Logger.isLoggable的实现逻辑:
/** * Check if a message of the given level would actually be logged * by this logger. This check is based on the Loggers effective level, * which may be inherited from its parent. * * @param level a message logging level * @return true if the given message level is currently being logged. */ public boolean isLoggable(Level level) { int levelValue = config.levelValue; if (level.intValue() < levelValue || levelValue == offValue) { return false; } return true; }
- 断点验证确认判断返回false的根因:
FINE日志级别的优先级值为500,低于Logger默认配置的INFO级别优先级值800,因此默认配置下该条日志会被直接过滤,不会输出。
待解答疑问
- 前述将日志级别从
INFO修改为FINE的代码变更是否存在疏漏,未考虑JUL Logger默认日志级别为优先级更高的INFO,导致默认场景下用户无法正常看到日志? - 是否存在官方支持的配置方式可以调整Logger的日志级别,或是有其他官方推荐的途径可以查看MockWebServer输出的请求、响应日志?
内容的提问来源于stack exchange,提问作者JustTheHighlights
相关产品推荐
相关产品推荐

