Logcat仅在MainActivity的onCreate生效,自定义类无日志输出原因咨询
排查自定义类中Log无输出的问题
我来帮你梳理下这个Log不输出的常见原因和解决办法:
1. Logcat的过滤规则挡住了日志
这是最容易踩的坑!你在MainActivity里用的TAG是"Test",而自定义类Imgpixel的TAG是"Quicknotes"——如果你的Logcat搜索框里只输入了Test来过滤日志,那Quicknotes TAG的日志自然不会显示出来。
解决办法:
- 清空Logcat的搜索框,或者输入
Quicknotes来过滤这个TAG的日志 - 确保Logcat的级别过滤设置为Verbose(或者比你调用的Log级别更低,比如你用
Log.v()就不能设成Debug及以上)
2. 自定义类中的Log代码根本没被执行
如果你的Imgpixel类没有被实例化,或者Log所在的代码块因为异常提前终止,那日志肯定打不出来:
- 先确认你在
MainActivity或者其他地方有没有创建Imgpixel的实例,比如new Imgpixel()——如果没有,构造方法里的代码(如果Log在构造里)根本不会运行 - 检查
Mat imgRead...这部分代码有没有抛出异常,比如图片路径错误、OpenCV初始化问题,导致程序崩溃或者跳过了后面的Log语句。可以在Imgpixel的构造方法第一行就加一句Log.v(TAG, "Imgpixel实例被创建了"),看看能不能输出,以此判断代码有没有走到这里。
3. Logcat的进程/设备选择错误
有时候Android Studio会默认显示其他设备或者其他进程的日志:
- 检查Logcat顶部的设备选择器,确保选的是你正在调试的手机/模拟器
- 检查进程选择器,选你当前APP的包名对应的进程,而不是系统进程或者其他APP的进程
4. ProGuard混淆移除了Log代码
如果你的APP开启了混淆(一般release包会开启,debug包默认不开启),ProGuard可能会把Verbose/Debug级别的Log代码直接移除,减小包体积。
解决办法:
打开proguard-rules.pro文件,找到类似下面的规则,如果有的话,注释掉或者调整:
-assumenosideeffects class android.util.Log { public static boolean isLoggable(java.lang.String, int); public static int v(...); public static int d(...); }
这样混淆时就不会移除Log代码了。
内容的提问来源于stack exchange,提问作者BDamsk
相关产品推荐
相关产品推荐

