【问题标题】:Can we turn off "chatty" in logcat? [duplicate]我们可以在 logcat 中关闭“聊天”吗? [复制]
【发布时间】:2016-05-03 13:48:53
【问题描述】:

所以我试图在大型代码库中找到一个难以捉摸的错误。因此,我在我的应用程序中进行了很多登录。我很幸运有多名测试人员在这方面工作。但是,我发现我的很多 logcat 日志都丢失了。他们被隐藏为“健谈”。例如

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

我发现有人提到使用 adb 命令

adb logcat -p

但我找不到 -p 的任何文档。我还发现很多设备(可能是 Marshmallow 上的所有设备)都不支持此功能。

除了将设备插入 Android Studio / Eclipse 之外,有没有办法阻止“闲聊”隐藏我的日志?

【问题讨论】:

  • 可能是关于 M 问题的一些有趣背景:github.com/JakeWharton/pidcat/issues/102
  • 我看过这个,但不知道该怎么做。这是否意味着 adb logcat -p 的 Marshmallow 等价物是 adb logcat -v brief | pidcat ?
  • pidcat 本身与这里无关 - 它是 logcat 的包装器,使输出更易于阅读 - 但在他们的代码库中的某个地方,他们必须处理 Android M 中引入的 logcat 行为的变化。如果您能找到该问题/更改,它可能会对 M/pre-M 的不同行为有所了解。
  • 谢谢。这确实是有道理的,但我无法确定此更改是否会影响 -p,因为我找不到有关该选项作用的任何信息。

标签: android logcat android-logcat


【解决方案1】:

【讨论】:

  • 这看起来很有用,您实际上可以将日志列入白名单和黑名单。谢谢
  • 对我不起作用
  • 我没有收到任何错误消息。在执行此命令 adb logcat -P "" 之后,它不会禁用聊天。我尝试提及我的应用程序的 UID/PID,它被列入白名单,但仍然健谈并没有被禁用。我的设备是一加5
  • 这行不通。
【解决方案2】:

我已经创建了自己的调试器和 DEBUG_MODE & DEBUG_WITH_STACKTRACE_MODE 在 build.gradle debug{} 中启用 true,默认为 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
}  
}

【讨论】:

  • 这很有趣,但我不确定它如何解决我的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-05-12
  • 1970-01-01
  • 2018-04-02
  • 2020-12-30
  • 1970-01-01
  • 1970-01-01
  • 2021-07-14
相关资源
最近更新 更多