我们可以在 logcat 中关闭“chatty”吗?

18

我正在尝试在一个庞大的代码库中查找难以捉摸的错误。因此,我在我的应用程序中添加了很多日志记录。我很幸运有多个测试人员参与其中。然而,我发现很多logcat日志已经丢失了。它们被隐藏为“chatty”。例如:

1799 12017 I logd: uid=10007 chatty comm=Binder_B, expire 4 lines

我找到了一些关于使用adb命令的提及:

adb logcat -p

但我找不到任何关于 -p 的文档。我还发现,在许多设备上(可能是Marshmallow上的所有设备),这是不支持的。

除了将设备插入Android Studio / Eclipse之外,是否有办法阻止“chatty”隐藏我的日志记录呢?


这里可能有一些关于M问题的有趣背景:https://github.com/JakeWharton/pidcat/issues/102 - stkent
我看到过这个,但不确定它的含义。这是否意味着Marshmallow相当于adb logcat -padb logcat -v brief | pidcat - TheUmpteenth
这里与pidcat本身无关 - 它只是围绕logcat的包装器,使输出更易于阅读 - 但在他们的代码库中,他们不得不处理Android M引入的logcat行为变更。如果您能找到该问题/更改,那么它可能会对M/pre-M上的不同行为提供一些见解。 - stkent
谢谢。这确实有意义,但我无法确定这个更改是否会影响 -p,因为我找不到任何关于该选项的信息。 - TheUmpteenth
2个回答

8

1
文档:https://developer.android.com/studio/command-line/logcat.html - DrChandra
1
这看起来非常有用,你实际上可以将日志列入白名单或黑名单。谢谢。 - TheUmpteenth
8
对我不起作用。 - srs
@SantoshSalunke 你能具体一些吗?发生了什么?有错误信息吗? - nealmcb
4
我没有收到任何错误消息。在执行adb logcat -P“”命令后,它并没有禁用chatty。我试图提及我的应用程序的UID/PID,它被列入白名单,但chatty仍未被禁用。我的设备是OnePlus5。 - srs
7
这不能用。 - Matt

-2

我已经创建了自己的调试器,并且在 build.gradle debug{} 中启用了 DEBUG_MODE 和 DEBUG_WITH_STACKTRACE_MODE,false 是默认值。

public class AppLoger {
      public static boolean DEBUG_MODE = BuildConfig.LOG_DEBUG_MODE;
public static boolean DEBUG_WITH_STACKTRACE_MODE =     BuildConfig.LOG_DEBUG_WITH_STACKTRACE_MODE;

/**
 * @param cls     Class<T>
 * @param message String
 * @author Android Lead
 */
public static <T> void logInfo(Class<T> cls, String message) {
    if (DEBUG_MODE || DEBUG_WITH_STACKTRACE_MODE) {
        String tag = cls.getName();
        Log.i(tag, "-----");
        Log.i(tag, LogType.INFO + ": " + message);
        if (DEBUG_WITH_STACKTRACE_MODE) {
            Log.i(tag, getStackTrace());
        }
    }
}

/**
 * @param cls     Class<T>
 * @param message String
 * @author Android Lead
 */
public static <T> void logWarning(Class<T> cls, String message) {
    if (DEBUG_MODE || DEBUG_WITH_STACKTRACE_MODE) {
        String tag = cls.getName();
        Log.w(tag, "-----");
        Log.w(tag, LogType.WARNING + ": " + message);

        if (DEBUG_WITH_STACKTRACE_MODE) {
            Log.w(tag, getStackTrace());
        }
    }
}

/**
 * @param cls     Class<T>
 * @param message String
 * @author Android Lead
 */
public static <T> void logError(Class<T> cls, String message) {
    if (DEBUG_MODE || DEBUG_WITH_STACKTRACE_MODE) {
        String tag = cls.getName();
        Log.e(tag, "-----");
        Log.e(tag, LogType.ERROR + ": " + message);

        if (DEBUG_WITH_STACKTRACE_MODE) {
            Log.e(tag, getStackTrace());
        }
    }
}

/**
 * @param cls     Class<T>
 * @param message String
 * @author Android Lead
 */
public static <T> void logError(Class<T> cls, String message, Throwable e) {
    if (DEBUG_MODE || DEBUG_WITH_STACKTRACE_MODE) {
        String tag = cls.getName();
        Log.e(tag, "-----");
        Log.e(tag, LogType.ERROR + ": " + message, e);

        if (DEBUG_WITH_STACKTRACE_MODE) {
            Log.e(tag, getStackTrace());
        }
    }
}

/**
 * @param tag String
 * @param msg String/JSON/ArrayList
 * @author Android Lead
 */
public static void e(String tag, Object msg) {
    if (DEBUG_MODE || DEBUG_WITH_STACKTRACE_MODE)
        Log.e(tag, "" + msg);
}

/**
 * @param tag String
 * @param msg String/JSON/ArrayList
 * @author Android Lead
 */
public static void i(String tag, Object msg) {
    if (DEBUG_MODE || DEBUG_WITH_STACKTRACE_MODE)
        Log.i(tag, "" + msg);
}

/**
 * @author Android Lead
 */
private static String getStackTrace() {
    StringWriter sw = new StringWriter();
    PrintWriter pw = new PrintWriter(sw);
    new Throwable().printStackTrace(pw);
    return sw.toString();
}

private enum LogType {
    INFO, WARNING, ERROR
}  
}

6
这很有趣,但我不确定它如何解决我的问题。 - TheUmpteenth

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接