5

如何过滤adb logcat带有冒号的标签的输出(仅使用 logcat,不使用grep或相同的工具)?

例如:

adb logcat "SomeApp:Something:* *:S"

哪里"SomeApp:Something"是指定的标签。

我知道这个符号不应该在标签中使用,但不幸的是它是第三方代码,而不是我们的......

先感谢您!

4

2 回答 2

3

我不得不说这是一个好问题。我检查了logcat的代码,发现logcat.cpp中过滤器表达式的解析代码。

int android_log_addFilterRule(AndroidLogFormat *p_format,
        const char *filterExpression)
{
    size_t i=0;
    size_t tagNameLength;
    android_LogPriority pri = ANDROID_LOG_DEFAULT;

    tagNameLength = strcspn(filterExpression, ":");

    if (tagNameLength == 0) {
        goto error;
    }

    if(filterExpression[tagNameLength] == ':') {
        pri = filterCharToPri(filterExpression[tagNameLength+1]);

        if (pri == ANDROID_LOG_UNKNOWN) {
            goto error;
        }
    }

    ...

    return 0;
error:
    return -1;
}

关键是logcat使用strcspn(filterExpression, ":")来解析一个tagname,所以基本上用logcat来过滤带冒号的tag恐怕是不可能的。但是,您可以找到其他方法。

我认为 Eclipse 中的 DDMS 可以使用正则表达式来过滤标签字段,因此如果您愿意,可以使用非常复杂的 RE。

"SomeApp\:Something:* *:S"

您甚至可以尝试一些 OR 功能,例如:

^Something1$|^Something2$

如果不想使用eclipse,可以尝试用自己的代码读出日志,解析成不同的日志记录和日志字段。然后,您可以编写一个简单的脚本来过滤您想要的任何内容。希望这可以帮到你。

于 2013-02-25T11:26:08.457 回答
0

您还可以通过 grep 等外部实用程序进行过滤:

亚行日志猫 | grep SomeApp

例如 AudioPolicyManager 的日志标签是“APM::AudioPolicyManager”,其中包含冒号:

adb logcat *:V | grep APM

于 2017-06-14T07:26:19.927 回答