android - 禁止特定的第 3 方应用程序和系统消息记录到 LogCat

标签 android logcat ddms

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

场景:

我公司的 QA 测试人员和 Android 开发人员严重依赖查看 LogCat 中的日志来对我们的应用程序进行分类。我读过很多关于 DDMS 和 Eclipse 的一个已知问题,在写入如此多的日志消息(~10,000)之后,UI 将仅显示 1-5 行,并在写入新日志时引用自身(http://code.google.com/p/android/issues/detail?id=2752) )。解决方法是在到达此点后清除日志,然后我们可以再次看到所有日志。

不幸的是,在某些设备(例如 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 秒收到一次以下消息 block ,涉及 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 功能,那么我们就会达到缓冲区限制。

可能的解决方案:

下面的通用软件让我对替代路径有了一些很好的了解。

  1. 构建我自己的 UI,这样我就不会遇到 UI 缓冲区限制,并且 DDMS UI 会自动清除自身。
  2. 可能让人们使用所有命令行,并显式过滤(远离用户界面,因为问题在那里而不是日志)。

如果我有时间构建不同的 UI,或者如果我确实找到解决 DDMS UI 问题的 Elixir ,那么在写入 X 日志后仅显示 1-5 条日志,我将尝试更新此内容。

最佳答案

Is there a way, to force specific system/3rd party application tags to never be logged (or shown) in the DDMS tool's Logcat?

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

There is a known issue I've read a lot about with DDMS and Eclipse where after so many log messages are written (~10,000), the UI will only display 1-5 lines and refersh itself whenever new logs are written.

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

The workaround for this is to clear the logs once we hit this point and we can then see all the logs again.

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

关于android - 禁止特定的第 3 方应用程序和系统消息记录到 LogCat,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7353414/

相关文章:

android - Toast消失后应用程序崩溃

android - Sdcard 内容在 DDMS 文件资源管理器 Android 6.0 中不可见

java - 我无法在我的 ddms 中查看任何文件夹(或将其显示为空) - 在数据/数据处 - 即使文件路径保存到该位置

android - 用于 netbeans 的 DDMS

android - 在 ListView 行上垂直居中文本

android - 在您的 Android 应用程序中只有一个使用 fragment 的 Activity 是一种不好的做法吗?

当我单击 Collection 夹图标时,索引 "1"处的 java.lang.ArrayIndexOutOfBoundsException ,大小 "1"

android - 检查对象是否存在于 JSON 中

Android LogCat sqlite语法错误含义

java - 应用程序未启动。找不到错误