真机上 console.log 不显示是因 WebView 默认不透出 JS 日志;安卓需 adb logcat 或开启 JS 桥接,iOS 需 Safari Web Inspector;onError 仅捕获 JS 异常,原生崩溃需原生日志工具定位。

console.log 在真机上为啥不显示?
因为 uni-app 的 console.log 默认只在 HBuilderX 控制台、浏览器调试器中可见;真机运行时,JS 层日志不会自动透出到系统级日志里——这不是 bug,是 WebView 容器的默认行为。
- 安卓真机:必须用
adb logcat或 Android Studio 的Logcat查看,且要手动开启 JS 日志桥接(部分基座版本才支持) - iOS 真机:
console.log完全不可见,除非用 Safari Web Inspector 连接设备并打开对应 WebView 的 Console 面板 - H5 模式下没问题,但只要切到 App 模式,就得换思路——别指望“点开控制台就看到所有 log”
App.vue 的 onError 捕获不到闪退?
onError 只能捕获 JS 层未处理的异常,比如 TypeError、ReferenceError;它对原生崩溃(如空指针、内存溢出、插件调用失败)完全无感——这类问题根本没机会走到 JS 错误处理流程里。
- 安卓闪退:优先看
adb logcat *:E或过滤FATAL EXCEPTION,找堆栈最顶上的java.lang.NullPointerException这类原生异常 - iOS 崩溃:必须进 Xcode →
Devices and Simulators→View Device Logs,搜索crash或你的包名,重点看Exception Type和Thread 0 name - uni-app 自己的
onError适合做兜底日志上报,但不能当“万能错误监听器”来依赖
怎么让日志在手机上随时可查?
靠悬浮按钮或长按触发的日志面板才是真机调试刚需,比如 DZMUniappConsoleLog 这类封装方案——它把日志存内存/本地文件,再提供 UI 入口查看,绕开了平台限制。
- 开关逻辑必须持久化:用
uni.setStorageSync存状态,App 启动时立刻读取,否则每次重启都得重新连点版本号激活 - 日志字段建议统一用
Log.keyTitle、Log.keyData这类预设 key,避免后期解析混乱 - 别在生产环境默认开启:日志写入有性能损耗,尤其高频请求场景,建议加个「连点 5 下版本号」的暗门机制
vconsole 能不能直接替代原生日志工具?
可以用于快速验证 JS 层问题,但不能替代原生日志工具——vconsole 是纯前端调试面板,看不到网络请求的底层状态码、SSL 握手失败、WebView 初始化错误这些关键信息。
- 启用方式简单:
import VConsole from 'vconsole'; new VConsole();,但仅限开发阶段,上线前务必移除或用条件编译包裹 - 它对 iOS 的兼容性比安卓差:某些 iOS WebView 版本下 vconsole 会卡顿甚至白屏,建议搭配 Safari Web Inspector 使用
- 真正定位崩溃,还是得回到
adb logcat或 Xcode Device Logs,vconsole 只是辅助,不是主干
真机日志的关键不在“怎么输出”,而在“输出到哪、谁能看到、怎么关联”。JS 层、Native 层、系统层三者日志彼此隔离,漏掉任何一层,就可能把一个空指针问题当成接口超时来排查。











