从logcat过滤掉某些日志

时间:2015-09-30 11:03:16

标签: android android-studio logcat android-logcat

我正在使用第三方库,目前有一些错误会不断在logcat中发出某个错误消息。有时这会每秒发生多次。文字总是一样的。 这使调试变得非常困难:

  • 让logcat滚动得非常快
  • 难以找到相关日志
  • 填写整个日志文件,删除旧日志(通常只需一分钟左右)

我认为这对性能也不利,但这不是真正的问题。

在等待库中的修复时,我想从logcat过滤掉这个特定的错误消息。所以我可以看到除了这一个错误之外的所有内容以及它的堆栈跟踪。

我可以使用Android Studio对其进行过滤吗? 如果已过滤,如果文件已满,邮件是否会被快速删除?

我知道如何使用proguard禁用日志。我希望有一个没有proguard的解决方案,因为在这个开发版本中,proguard被禁用了。

4 个答案:

答案 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 IDThread ID以及时间戳 grep -w 4451 4451是进程ID。这样可以确保我只看到来自我应用的日志 grep -v 4488 4488是我要过滤掉的错误消息的线程ID。这将删除具有指定线程ID的所有行。这是有效的,因为在我的情况下,错误消息只出现在一个单独的线程中。

现在我可以看到来自我的应用程序的所有日志,而没有来自库中错误的所有噪音。 (未确认,但我相信日志文件已满时日志仍会消失,因为来自库的错误消息源不断。)

这是一个命令行解决方案,因此它仍然不是在android studio中使用logcat的最佳解决方案。但它完全适用于Android Studio中的终端选项卡。

答案 3 :(得分:1)

要在logcat中过滤掉不需要的Android-Studio消息,您可以使用正则表达式否定查找: 例如。过滤掉所有包含zip的行:

  1. Logcat-Window中单击filter-dropdown menu
  2. 选择"edit Filter Configuration"
    将以下代码放在Log Message字段中:^((?!zip).)*$
    并选择字段右侧的regex

我在以下帖子中找到了使用正则表达式的这种方式:Regular expression to match a line that doesn't contain a word?