Par défaut, il semble que logcat tronquera tout message de journal qu'il considère comme "trop long". Cela se produit à la fois à l'intérieur d'Eclipse et lors de l'exécution de logcat sur la ligne de commande à l'aide de adb -d logcat
, et tronque certains messages de débogage importants.
Existe-t-il un moyen d'augmenter la longueur de chaîne maximale prise en charge par logcat pour qu'il arrête de tronquer les informations de débogage? La documentation officielle laisse entendre qu'il n'y en a peut-être pas, mais peut-être que logcat prend en charge certaines options supplémentaires non mentionnées ici?
Réponses:
Il existe un tampon de taille fixe dans logcat pour les journaux binaires (
/dev/log/events
) et cette limite est de 1024 octets. Pour les journaux non binaires, il existe également une limite:Ainsi, la taille réelle des messages pour les journaux binaires et non binaires est d'environ 4076 octets. L'interface de journalisation du noyau impose cette
LOGGER_ENTRY_MAX_PAYLOAD
limite.Les sources liblog (utilisées par logcat) disent également:
Je vous recommanderais l' outil nxlog qui n'utilise pas le binaire logcat, mais en raison des limitations du noyau, je doute qu'il résoudra votre problème. Néanmoins, cela vaut peut-être la peine d'essayer. (avertissement: je suis l'auteur.)
la source
LOGGER_ENTRY_MAX_PAYLOAD
a été réduit de 4076 à 4068 dans les versions plus récentes d'Android (voir ici ).Ok, intéressant. J'ai été déçu de voir que la réponse était "vous ne pouvez pas vraiment l'élargir". Ma première pensée était de le diviser pour que je puisse voir le tout, alors je partage ici avec vous comment je fais exactement cela (non pas que ce soit quelque chose d'extraordinaire ni presque efficace, mais cela fait le travail à la rigueur):
Modifié pour afficher la dernière chaîne!
la source
int chunkCount = sb.length() / 4000;
Utilisationint chunkCount = sb.length() / 4000; if (chunkCount * 4000 < sb.length()) chunkCount++;
else { Log.v(TAG, sb); }
pour imprimer également le journal lorsque le message est <= 4000 caractèresDivisez-le en plusieurs morceaux de manière récursive.
la source
la source
Voici le code que j'utilise - il tronque les lignes à la limite de 4000 tout en coupant la ligne au niveau des nouvelles lignes plutôt qu'au milieu de la ligne. Rend un fichier journal plus facile à lire.
Usage:
La mise en oeuvre:
la source
Le code ci-dessous est un raffinement de ce qui a été publié par Mark Buikema. Il rompt la chaîne aux nouvelles lignes. Utile pour la journalisation de longues chaînes JSON.
la source
la source
nous cette logique de pagination
la source
fournir ma propre vision de la solution de Travis,
profiter du fait qui
Log.println()
renvoie le nombre d'octets écrits pour éviter le codage en dur "4000". puis, appelez-vous de manière récursive sur la partie du message qui n'a pas pu être enregistrée jusqu'à ce qu'il ne reste plus rien.la source
Si votre journal est très long (par exemple, la journalisation du vidage complet de votre base de données pour des raisons de débogage, etc.), il peut arriver que logcat empêche une journalisation excessive. Pour contourner ce problème, vous pouvez ajouter un délai d'expiration toutes les x millisecondes.
Attention, ne l'utilisez qu'à des fins de débogage car cela peut arrêter le thread principal des blocs.
la source
Comme @mhsmith l'a mentionné, le
LOGGER_ENTRY_MAX_PAYLOAD
est 4068 dans les versions récentes d'Android. Toutefois, si vous utilisez 4068 comme longueur maximale de message dans les extraits de code proposés dans d'autres réponses, les messages seront tronqués. En effet, Android ajoute plus de caractères au début et à la fin de votre message, qui comptent également. D'autres réponses utilisent la limite de 4000 comme solution de contournement. Cependant, il est possible d'utiliser vraiment toute la limite avec ce code (le code génère une balise à partir de la trace de la pile pour afficher le nom de la classe et le numéro de ligne qui a appelé le journal, n'hésitez pas à le modifier):la source
Je ne connais aucune option pour augmenter la longueur de logcat, mais nous pouvons trouver les différents journaux comme le journal principal, le journal des événements, etc. Le journal principal contient généralement tout ce que sa longueur peut atteindre jusqu'à 4 Mo. dans le terminal de journal. Le chemin est: \ data \ logger.
la source
Bien que les autres solutions fournies aient été utiles, elles ne m'ont pas satisfait car elles ne couvraient pas les cas où le journal est plus long que deux fois plus long que le LOGGER_ENTRY_MAX_LEN mentionné par @ b0ti. De plus, même ma solution suivante n'est pas parfaite car le LOGGER_ENTRY_MAX_LEN n'est pas récupéré dynamiquement. Si quelqu'un connaît un moyen de le faire, j'aimerais en entendre parler dans les commentaires! Quoi qu'il en soit, c'est la solution que j'utilise dans mon code en ce moment:
la source