Android ADB Logcat:带冒号的标签

时间:2013-02-25 11:04:14

标签: android adb logcat

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

e.g:

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

其中"SomeApp:Something"是指定的标记。

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

提前谢谢!

2 个答案:

答案 0 :(得分:2)

我不得不说这是一个很好的问题。我检查了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,“:”)来解析一个标记名,所以基本上我恐怕不可能使用logcat过滤带冒号的标记。但是,您可以找到其他方式。

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

"SomeApp\:Something:* *:S"

您甚至可以尝试使用以下功能:

^Something1$|^Something2$

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

答案 1 :(得分:0)

您还可以通过外部实用程序(如grep:

)进行过滤

adb logcat | grep SomeApp

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

adb logcat *:V | grep APM