为何Android 11设备下Log.d()、Log.v()无法打印,其余级别日志正常
问题根因
- 厂商定制ROM的日志限制:Android 11(API 30)开始,小米、华为、OPPO、vivo等国内厂商的定制系统新增了第三方应用日志输出限制,默认禁止普通第三方应用输出
Log.d、Log.v级别的日志,仅允许系统应用输出全等级日志,该限制不受系统全局日志等级设置影响,这是Android 10升级到11后日志异常的最常见原因。 - Logcat过滤等级设置错误:Android Studio 2020.3版本的新版Logcat默认可能会记住上次设置的过滤等级,如果顶部的日志等级下拉框选择了
Info及以上等级,Log.d、Log.v会被自动过滤不显示。 - 开发者选项额外开关未开启:部分厂商ROM需要在开发者选项中手动开启「增强日志输出」「允许USB调试日志输出」这类独立开关,仅设置全局日志等级为VERBOSE不会生效,另外注意系统日志等级的正确拼写为
VERBOSE,如果设置时拼写错误也会导致配置不生效。
修复方案
- 先检查Android Studio Logcat顶部的过滤配置:确认日志等级下拉框选中
Verbose,且没有额外的过滤规则误拦截了DEBUG、VERBOSE级别的日志。 - 检查设备开发者选项配置:找到和日志输出相关的选项,比如小米设备需要开启「启用日志输出」、调整「日志记录器缓冲区大小」为1M以上;华为设备需要开启「允许调试日志输出」,所有操作完成后重启设备生效。
- 临时开启指定TAG日志权限:连接设备执行adb命令
adb shell setprop log.tag.<你的自定义日志TAG> VERBOSE,执行完成后重启应用即可看到对应TAG的Log.d、Log.v日志,设备重启后需要重新执行该命令。 - 封装自定义日志工具绕开限制:如果不想每次调试都修改设备设置,可以自己封装日志工具类,将
Log.d、Log.v的调用强制转为Log.i输出,在日志内容前加[D]、[V]前缀标识原始等级,完全绕开厂商的日志等级限制。
内容的提问来源于stack exchange,提问作者SkydevilK
相关产品推荐
相关产品推荐

