android中logcat列印輸出結果不完整,超出上限
阿新 • • 發佈:2019-01-03
今天寫程式碼的時候,伺服器返回的json資料量比較大,然後我想在logcat中完全輸出伺服器返回的Json格式的字串事,發現logcat中返回的資訊中明顯少了後面一節,剛開始還以為程式有bug,除錯了好半天才發現原來程式沒有bug,而是LogCat中的每次的Msg輸出是有上限的,坑的我好慘啊,查了資料才發現,.原來logcat在實現上對於message的記憶體分配大概是4k左右.所以超過的內容都直接被丟棄;
於是自己封裝了一個屬於自己的LogUtil類,程式碼如下:
public class LogUtil { //可以全域性控制是否列印log日誌 private static boolean isPrintLog = true; private static int LOG_MAXLENGTH = 2000; public static void v(String msg) { v("LogUtil", msg); } public static void v(String tagName, String msg) { if (isPrintLog) { int strLength = msg.length(); int start = 0; int end = LOG_MAXLENGTH; for (int i = 0; i < 100; i++) { if (strLength > end) { Log.v(tagName + i, msg.substring(start, end)); start = end; end = end + LOG_MAXLENGTH; } else { Log.v(tagName + i, msg.substring(start, strLength)); break; } } } } public static void d(String msg) { d("LogUtil", msg); } public static void d(String tagName, String msg) { if (isPrintLog) { int strLength = msg.length(); int start = 0; int end = LOG_MAXLENGTH; for (int i = 0; i < 100; i++) { if (strLength > end) { Log.d(tagName + i, msg.substring(start, end)); start = end; end = end + LOG_MAXLENGTH; } else { Log.d(tagName + i, msg.substring(start, strLength)); break; } } } } public static void i(String msg) { i("LogUtil", msg); } public static void i(String tagName, String msg) { if (isPrintLog) { int strLength = msg.length(); int start = 0; int end = LOG_MAXLENGTH; for (int i = 0; i < 100; i++) { if (strLength > end) { Log.i(tagName + i, msg.substring(start, end)); start = end; end = end + LOG_MAXLENGTH; } else { Log.i(tagName + i, msg.substring(start, strLength)); break; } } } } public static void w(String msg) { w("LogUtil", msg); } public static void w(String tagName, String msg) { if (isPrintLog) { int strLength = msg.length(); int start = 0; int end = LOG_MAXLENGTH; for (int i = 0; i < 100; i++) { if (strLength > end) { Log.w(tagName + i, msg.substring(start, end)); start = end; end = end + LOG_MAXLENGTH; } else { Log.w(tagName + i, msg.substring(start, strLength)); break; } } } } public static void e(String msg) { e("LogUtil", msg); } public static void e(String tagName, String msg) { if (isPrintLog) { int strLength = msg.length(); int start = 0; int end = LOG_MAXLENGTH; for (int i = 0; i < 100; i++) { if (strLength > end) { Log.e(tagName + i, msg.substring(start, end)); start = end; end = end + LOG_MAXLENGTH; } else { Log.e(tagName + i, msg.substring(start, strLength)); break; } } } } }
問題解決了,做個筆記。