禁止将特定的第三方应用和系统消息记录到LogCat

时间:2011-09-08 19:29:53

标签: android logcat ddms

有没有办法强制在DDMS工具的Logcat中永远不记录(或显示)特定的系统/第三方应用程序标签?

情景:

我公司的QA测试人员和Android开发人员在很大程度上依赖于查看LogCat中的日志来对我们的应用程序进行分类。我已经阅读了很多关于DDMS和Eclipse的已知问题,在写完这么多日志消息后(~10,000),UI只会显示1-5行,并且每当写入新日志时都会自行引用({{3 }})。解决此问题的方法是在我们达到此点后清除日志,然后我们可以再次查看所有日志。

不幸的是,在某些设备(如Thunderbolt或G2X)上进行测试时,其他应用程序或系统消息会严重垃圾邮件。例如,在我的G2X上,当连接到Wifi时,我每隔3秒收到一次这些消息:

09-08 15:20:11.885: DEBUG/StatusBarPolicy(1270): onSignalStrengthsChanged : SignalStrength: 21 -1 -1 -1 -1 -1 -1 gsm
09-08 15:20:11.895: ERROR/PhoneInterfaceManager(2507): getNetworkType = radiotech =  11
09-08 15:20:11.895: ERROR/PhoneInterfaceManager(2507): getNetworkType =  NETWORK_TYPE_HSPA
09-08 15:20:12.605: DEBUG/WifiStateTracker(1106): WiFiStatetracker.java handleMessage event: 8

在Thunderbolt上,我们的一位QA工程师每隔0.3秒接收一次以下消息块,参考GPS:

09-08 14:50:30.950: INFO/RPC(1574): 3000008c:00050000 reading data.
09-08 14:50:30.950: INFO/RPC(1574): 3000008c:00050000 received CALL.
09-08 14:50:30.950: INFO/RPC(1574): 3000008c:00050000 waking up callback thread.
09-08 14:50:30.950: INFO/RPC(1574): 3000008c:00050000 dispatching RPC call (XID 2711,     xdr 0x4f66a8) for callback client 3100008c:00050001.
09-08 14:50:30.950: INFO/RPC(1574): 3000008c:00050000 cloning XDR for callback client 3100008c:00050001.
09-08 14:50:30.950: INFO/RPC(1574): CLONED fd 119 --> 107
09-08 14:50:30.950: INFO/RPC(1574): 3000008c:00050000 marking input buffer as free.
09-08 14:50:30.950: INFO/RPC(1574): reading on fd 107 for 3100008c:327681
09-08 14:50:30.950: INFO/RPC(1574): START: SVC DISPATCH 3100008c:00050001 --> 00000001
09-08 14:50:30.950: INFO/RPC(1574): 3100008c:327681 sending RPC reply (XID 2711)
09-08 14:50:30.950: INFO/RPC(1574): DONE: SVC DISPATCH 3100008c:00050001 --> 00000001
09-08 14:50:30.950: INFO/RPC(1574): CLOSING fd 107

这会导致DDMS在不到一分钟的时间内进入完全缓冲状态,比我们的QA工程师执行测试并检查我们的应用程序日志更快。

现在我想要一种永远不会出现这些消息的方法,所以我们没有达到这个缓冲区限制。

我们的应用确实使用严重性和过滤器代码。但是在DDMS中,当我们创建一个带有我们想要查看的严重性/过滤器的新选项卡式窗口时,由于默认的“日志”选项卡从任何地方获取所有日志,因此我们达到了此缓冲区上限。因此,过滤器/严重性的解决方法似乎不起作用。

已知的解决方法:

通常我们会尝试关闭垃圾邮件日志的服务/应用程序(如果可以识别)。但是,如果我们想测试GPS功能,那么我们就达到了缓冲限制。

可能的解决方案:

下面的Commonware让我对替代路径有了一些很好的见解。

  1. 构建我自己的UI,然后我不会遇到该UI缓冲区限制,DDMS UI将自动清除。
  2. 可能让人们使用所有命令行,并明确过滤(因为问题存在而远离用户界面,而不是日志)。
  3. 如果我开始构建不同的用户界面,或者如果我发现这个DDMS用户界面的问题,我会尝试更新这个,在X日志写完后只显示1-5个日志。< / p>

2 个答案:

答案 0 :(得分:2)

Eclipse LogCat窗口有两组功能(在右侧),应该有帮助......

  • 您可以按严重性过滤日志,这可能会隐藏其他应用程序/服务中的许多问题日志。
  • 您可以让您的应用使用特定的日志标记 - 例如Log.d("MyTestApp", "onCreate");,然后为该标记设置LogCat过滤器。您仍然可以通过转到默认选项卡查看其他应用程序正在执行的操作(如果您愿意),但可以专注于过滤器选项卡中的日志。

答案 1 :(得分:2)

  

有没有办法强制在DDMS工具的Logcat中永远不记录(或显示)特定的系统/第三方应用程序标签?

如@Torid所示,您可以过滤掉LogCat中各种方式显示的内容。除了编写自己的固件之外,您无法阻止其他应用程序或操作系统进行日志记录。

  

我已经阅读了很多关于DDMS和Eclipse的已知问题,在写完这么多日志消息后(~10,000),UI只会显示1-5行,并且每当写入新日志时都会自行引用。

考虑到日志记录区域是一个64KB的环形缓冲区,设备在大部分时间内都会有超过10K的消息,因为大多数消息很短。

  

解决方法是在我们点击这一点后清除日志,然后我们可以再次查看所有日志。

由于“清除日志”不会清除日志(它在DDMS中设置基于时间的过滤器),因此您的问题在于LogCat UI,而不是日志本身。关注@ Torid的建议。如果您无法按照自己的意愿进行过滤,欢迎使用adb logcat作为数据源来推送自己的用户界面。