【问题标题】:where are logcat filters applied?logcat 过滤器应用在哪里?
【发布时间】:2013-01-23 01:01:37
【问题描述】:
我有一个连接到 pc 的 android 设备并打开了多个显示 logcat 信息的 shell。每个人都使用其特定的过滤器运行。
所以我现在的问题是,这些过滤器应用在哪里?已经在手机上,因此只有过滤后的消息通过 USB 发送。还是它们应用在 adb 服务器或客户端的 pc 上?我只是想防止多个未经过滤的 logcat 流在 USB 上同时运行,因为我的带宽有限。
谢谢
【问题讨论】:
标签:
android
filter
filtering
adb
logcat
【解决方案1】:
或者是应用在pc上的adb服务器还是客户端?
它们被呈现 LogCat 信息的任何应用程序应用。
【解决方案2】:
目前不可能在不同设备上运行相同的构建。如果您有不同的构建,那么您可以根据设备名称或版本应用过滤器。
当你想这样做时,它可以通过一些技巧来实现。
Log.v(LOG_TAG,"message");
在您的 LOG_TAG 中附加设备 ID,可以通过 TelephonyManager 识别。
并使用它添加过滤器。
【解决方案3】:
Android 将设备上的日志信息存储到 4 个不同的缓冲区(事件日志、系统日志、无线电日志、主日志)中。之后adbd 守护进程可以访问此信息并将其发送给客户端。因此,只有在客户端您才能过滤信息,因为所有信息都存储在手机上。
【解决方案4】:
使用设备上的logcat 命令将数据从内核缓冲区中提取出来。如果你跑
% adb logcat -\?
您可以看到使用信息,其中包括“filterspecs”的描述。这些可以在命令行上设置,或者通过设置ANDROID_LOG_TAGS。例如:
% adb logcat '*:W'
将只显示警告或错误级别的消息。
这里的技巧是adb logcat 只是adb shell logcat 的简写,另外还有将ANDROID_LOG_TAGS 环境变量传播到设备的额外好处。过滤是由logcat 命令完成的,它只是将文本输出转储到 adb 上。 logcat 命令的输出没有得到任何特殊处理。
因此,您的问题的答案是:过滤发生在设备上,针对每个窗口单独进行。
DDMS 的工作方式不同。
【解决方案5】:
过滤器应用在手机上。因此,您中的一些人为不存在的 logcat 标记输入过滤器,然后没有流量通过 USB。
但是使用 cmd shell 打开的每个 logcat 都会创建一个新的流,这会增加总流量。