我们可以在 logcat 中关闭 "chatty" 吗?
Can we turn off "chatty" in logcat?
所以我试图在大型代码库中找到难以捉摸的错误。因此,我在我的应用程序中进行了大量登录。我很幸运有多个测试人员在做这件事。但是,我发现很多 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' 隐藏我的日志?
我已经创建了自己的调试器并且 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
}
}
我也找不到文档,但是根据Issue 202457 - android - Disable chatty filtering of log messages (I/chatty ... expire N lines) - Android Open Source Project - Issue Tracker你想要的命令是
adb logcat -P ""
所以我试图在大型代码库中找到难以捉摸的错误。因此,我在我的应用程序中进行了大量登录。我很幸运有多个测试人员在做这件事。但是,我发现很多 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' 隐藏我的日志?
我已经创建了自己的调试器并且 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
}
}
我也找不到文档,但是根据Issue 202457 - android - Disable chatty filtering of log messages (I/chatty ... expire N lines) - Android Open Source Project - Issue Tracker你想要的命令是
adb logcat -P ""