我已经创建了自己的调试器,并且在 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;
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());
}
}
}
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());
}
}
}
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());
}
}
}
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());
}
}
}
public static void e(String tag, Object msg) {
if (DEBUG_MODE || DEBUG_WITH_STACKTRACE_MODE)
Log.e(tag, "" + msg);
}
public static void i(String tag, Object msg) {
if (DEBUG_MODE || DEBUG_WITH_STACKTRACE_MODE)
Log.i(tag, "" + msg);
}
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
}
}
adb logcat -p
是adb logcat -v brief | pidcat
? - TheUmpteenthpidcat
本身无关 - 它只是围绕logcat的包装器,使输出更易于阅读 - 但在他们的代码库中,他们不得不处理Android M引入的logcat行为变更。如果您能找到该问题/更改,那么它可能会对M/pre-M上的不同行为提供一些见解。 - stkent