我正在使用第三方库,目前有一些错误会不断在logcat中发出某个错误消息。有时这会每秒发生多次。文字总是一样的。 这使调试变得非常困难:
我认为这对性能也不利,但这不是真正的问题。
在等待库中的修复时,我想从logcat过滤掉这个特定的错误消息。所以我可以看到除了这一个错误之外的所有内容以及它的堆栈跟踪。
我可以使用Android Studio对其进行过滤吗? 如果已过滤,如果文件已满,邮件是否会被快速删除?
我知道如何使用proguard禁用日志。我希望有一个没有proguard的解决方案,因为在这个开发版本中,proguard被禁用了。
答案 0 :(得分:1)
1-您可以在创建标签时为其添加标签:
Log.i("MyTag", msg);
并在logcat中过滤它们:
标签:MyTag
2-要过滤仅来自您应用的所有日志,请键入以下内容来过滤logcat:
应用程式:com.example.yourappname
修改强> 由于评论:
3-要过滤线程创建的日志,请在运行时查找要过滤相同日志的日志。请参阅TID列并使用TID(线程ID)
过滤logcat请注意,每次再次运行您的应用时,都应该再次执行此操作。
答案 1 :(得分:1)
使用命令行中的adb可以轻松过滤掉特定标记。我有一个名为logcat_filtered
的脚本,如下所示:
#!/bin/bash
ANDROID_LOG_TAGS='AlarmManager:S daemonapp:S WifiStateMachine:S SensorService:S SignalStrength:S dalvikvm:S Exchange:S ProcessStatsService:S GCoreUlr:S dalvikvm-heap:S chromium:S DMCFaceEngine:S SmartFaceService:S SecCamera-JNI-Cpp:S Camera_HAL:S STATUSBAR-BatteryController:S STATUSBAR-PhoneStatusBar:S STATUSBAR-NetworkController:S Camera:S lights:S BatteryService:S IconMerger:S LockPatternUtils:S' adb logcat
这消除了我不感兴趣的很多恼人的日志输出。
从命令行再一个更简单的解决方案是使用grep:
adb logcat | grep -v dontwanttoseethisstring
答案 2 :(得分:1)
将前两个答案与documentation的一些检查相结合,为我提供了一个很好的解决方案,可以查看我想要的日志。
adb -d logcat -v threadtime | grep -w 4451 | grep -v 4488
-d
所以我可以将输出限制在当前连接设备的日志中,同时我仍然在后台运行模拟器。
-v threadtime
这样我就可以看到Process ID
和Thread ID
以及时间戳
grep -w 4451
4451是进程ID。这样可以确保我只看到来自我应用的日志
grep -v 4488
4488是我要过滤掉的错误消息的线程ID。这将删除具有指定线程ID的所有行。这是有效的,因为在我的情况下,错误消息只出现在一个单独的线程中。
现在我可以看到来自我的应用程序的所有日志,而没有来自库中错误的所有噪音。 (未确认,但我相信日志文件已满时日志仍会消失,因为来自库的错误消息源不断。)
这是一个命令行解决方案,因此它仍然不是在android studio中使用logcat的最佳解决方案。但它完全适用于Android Studio中的终端选项卡。
答案 3 :(得分:1)
要在logcat
中过滤掉不需要的Android-Studio
消息,您可以使用正则表达式否定查找:
例如。过滤掉所有包含zip
的行:
Logcat-Window
中单击filter-dropdown menu
"edit Filter Configuration"
Log Message
字段中:^((?!zip).)*$
regex
。我在以下帖子中找到了使用正则表达式的这种方式:Regular expression to match a line that doesn't contain a word?