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

时间:2016-05-03 13:48:53

标签: android logcat android-logcat

所以我试图在大型代码库中找到一个难以捉摸的bug。因此,我在我的应用程序中添加了大量日志。我很幸运,有多个测试人员正在研究这个问题。但是,我发现很多我的logcat日志都丢失了。他们被隐藏为'健谈'。例如

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

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

adb logcat -p

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

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

2 个答案:

答案 0 :(得分:5)

答案 1 :(得分:-1)

我已经创建了自己的调试器和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
}  
}