2016-05-03 321 views
12

所以我試圖在一個大的代碼庫中找到一個難以捉摸的bug。因此,我已將大量日誌記錄放入我的應用程序中。我很幸運有多個測試人員在這方面工作。但是,我發現我的很多logcat日誌丟失了。他們被隱藏爲「健談」。例如我們可以在logcat中關閉「chatty」嗎?

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

我發現使用ADB命令

adb logcat -p

的一些提及,但我不能找到一個-p任何文件。我還發現,有很多設備(可能是棉花糖上的所有設備),這是不受支持的。

除了將設備插入Android Studio/Eclipse之外,有沒有辦法阻止'chatty'隱藏我的日誌?

+0

可能是在M發出一些有趣的背景在這裏:https://github.com/JakeWharton/pidcat/issues/102 – stkent

+0

我已經看到了這一點,但不知道做什麼的。這是否意味着 'adb logcat -p' 的棉花糖等價物是 'adb logcat -v brief | pidcat' ? – TheUmpteenth

+0

'pidcat'本身在這裏並不相關 - 它是logcat的一個包裝器,它使得輸出更易於閱讀 - 但是在他們的代碼庫中的某處,他們必須處理Android M中引入的logcat行爲的變化。如果您可以找到該問題/改變它可能會對M/pre-M上的不同行爲有所瞭解。 – stkent

回答

0

我已經建立了我自己的調試器和DEBUG_MODE & DEBUG_WITH_STACKTRACE_MODE 啓用在調試的build.gradle {}真假bydefault

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 
} 
} 
+3

這很有趣,但我不確定它是如何解決我的問題的。 – TheUmpteenth

相關問題