Cómo mostrar mensajes largos en logcat

Estoy intentando mostrar el mensaje largo en el logcat. Si la longitud del mensaje es de más de 1000 caracteres, se rompe.

¿Cuál es el mecanismo para mostrar todos los caracteres del mensaje largo en logcat?

Si logcat está limitando la longitud a 1000, entonces puede dividir la cadena que desea registrar con String.subString () y registrarla en pedazos. Por ejemplo:

int maxLogSize = 1000; for(int i = 0; i <= veryLongString.length() / maxLogSize; i++) { int start = i * maxLogSize; int end = (i+1) * maxLogSize; end = end > veryLongString.length() ? veryLongString.length() : end; Log.v(TAG, veryLongString.substring(start, end)); } 

Como un seguimiento a la respuesta spatulamania escribí una clase de contenedor que maneja esto para usted. Sólo tiene que cambiar la importación y se registrará todo

 public class Log { public static void d(String TAG, String message) { int maxLogSize = 2000; for(int i = 0; i <= message.length() / maxLogSize; i++) { int start = i * maxLogSize; int end = (i+1) * maxLogSize; end = end > message.length() ? message.length() : end; android.util.Log.d(TAG, message.substring(start, end)); } } } 

Pruebe este pedazo de código para mostrar el mensaje largo en logcat.

 public void logLargeString(String str) { if(str.length() > 3000) { Log.i(TAG, str.substring(0, 3000)); logLargeString(str.substring(3000)); } else { Log.i(TAG, str); // continuation } } 

Esto se basa en la respuesta de spatulamania, es un poco más sucinto, y no agregará un mensaje de registro vacío al final:

 final int chunkSize = 2048; for (int i = 0; i < s.length(); i += chunkSize) { Log.d(TAG, s.substring(i, Math.min(s.length(), i + chunkSize))); } 

Para no minimizar las líneas de división entre los mensajes de registro, tomo la cadena grande y registro cada línea por separado.

 void logMultilineString(String data) { for (String line : data.split("\n")) { logLargeString(line); } } void logLargeString(String data) { final int CHUNK_SIZE = 4076; // Typical max logcat payload. int offset = 0; while (offset + CHUNK_SIZE <= data.length()) { Log.d(TAG, data.substring(offset, offset += CHUNK_SIZE)); } if (offset < data.length()) { Log.d(TAG, data.substring(offset)); } } 

Así es como OkHttp con HttpLoggingInterceptor lo hace:

 public void log(String message) { // Split by line, then ensure each line can fit into Log's maximum length. for (int i = 0, length = message.length(); i < length; i++) { int newline = message.indexOf('\n', i); newline = newline != -1 ? newline : length; do { int end = Math.min(newline, i + MAX_LOG_LENGTH); Log.d("OkHttp", message.substring(i, end)); i = end; } while (i < newline); } } 

MAX_LOG_LENGTH es 4000.

Aquí se utiliza Log.d (depuración) y hardcoded "OkHttp" etiqueta.

Se divide el tronco en líneas nuevas o cuando alcanza la longitud máxima.

Esta clase a continuación es una clase de ayuda que puedes usar (si tienes soporte lambda para lanzar Jack & Jill o retrolambda) para hacer lo mismo que OkHttp hace en cualquier registro:

 /** * Help printing logs splitting text on new line and creating multiple logs for too long texts */ public class LogHelper { private static final int MAX_LOG_LENGTH = 4000; public static void v(@NonNull String tag, @Nullable String message) { log(message, line -> Log.v(tag, line)); } public static void d(@NonNull String tag, @Nullable String message) { log(message, line -> Log.d(tag, line)); } public static void i(@NonNull String tag, @Nullable String message) { log(message, line -> Log.i(tag, line)); } public static void w(@NonNull String tag, @Nullable String message) { log(message, line -> Log.w(tag, line)); } public static void e(@NonNull String tag, @Nullable String message) { log(message, line -> Log.e(tag, line)); } public static void v(@NonNull String tag, @Nullable String message, @Nullable Throwable throwable) { log(message, throwable, line -> Log.v(tag, line)); } public static void d(@NonNull String tag, @Nullable String message, @Nullable Throwable throwable) { log(message, throwable, line -> Log.d(tag, line)); } public static void i(@NonNull String tag, @Nullable String message, @Nullable Throwable throwable) { log(message, throwable, line -> Log.i(tag, line)); } public static void w(@NonNull String tag, @Nullable String message, @Nullable Throwable throwable) { log(message, throwable, line -> Log.w(tag, line)); } public static void e(@NonNull String tag, @Nullable String message, @Nullable Throwable throwable) { log(message, throwable, line -> Log.e(tag, line)); } private static void log(@Nullable String message, @NonNull LogCB callback) { if (message == null) { callback.log("null"); return; } // Split by line, then ensure each line can fit into Log's maximum length. for (int i = 0, length = message.length(); i < length; i++) { int newline = message.indexOf('\n', i); newline = newline != -1 ? newline : length; do { int end = Math.min(newline, i + MAX_LOG_LENGTH); callback.log(message.substring(i, end)); i = end; } while (i < newline); } } private static void log(@Nullable String message, @Nullable Throwable throwable, @NonNull LogCB callback) { if (throwable == null) { log(message, callback); return; } if (message != null) { log(message + "\n" + Log.getStackTraceString(throwable), callback); } else { log(Log.getStackTraceString(throwable), callback); } } private interface LogCB { void log(@NonNull String message); } } 
  • Registro de ahorros de Android en cada ejecución para el informe de error
  • E / art: Error al enviar la respuesta al depurador: Canal roto, pero la aplicación todavía se ejecuta
  • Imprimir una lista <String> a logcat
  • ¿Por qué Logcat no imprimirá un registro cuya etiqueta empiece con "IMS"?
  • Visor de Logcat en Eclipse parpadea de manera molesta
  • Android Studio - ADB Error - "... dispositivo no autorizado. Comprueba el cuadro de diálogo de confirmación en tu dispositivo. "
  • Cómo agregar etiquetas a rastros de pila de Android?
  • La aplicación se ha detenido de forma inesperada: ¿Cómo depurar?
  • Migrar a Android Studio: cómo configurar mejor la vista de logcat
  • Evitar que el filtro de sesión de LogCat le robe el foco
  • ¿Es mi "hal_process_report_ind: mala calidad del artículo: 11" algo de qué preocuparse?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.