Comment imprimer les numéros de ligne dans le journal. Dites lors de la sortie de certaines informations dans le journal, je veux également imprimer le numéro de ligne où cette sortie est dans le code source. Comme nous pouvons le voir dans la trace de la pile, il affiche le numéro de ligne où l'exception s'est produite. La trace de pile est disponible sur l'objet d'exception.
Une autre alternative pourrait consister à inclure manuellement le numéro de ligne lors de l'impression dans le journal. Est-ce qu'il y a un autre moyen?
Réponses:
Depuis Angsuman Chakraborty :la source
Nous avons fini par utiliser une classe personnalisée comme celle-ci pour notre travail sur Android:
la source
getStackTrace()[3]
au lieu degetStackTrace()[2]
Manière rapide et sale:
Avec quelques détails supplémentaires:
Cela produira quelque chose comme ceci:
la source
System.out.println("i am here: " + new Exception().getStackTrace()[0]);
me donne tous les détails dont j'ai besoin :)Je suis obligé de répondre en ne répondant pas à votre question. Je suppose que vous recherchez le numéro de ligne uniquement pour prendre en charge le débogage. Il existe de meilleures façons. Il existe des moyens hackers pour obtenir la ligne actuelle. Tout ce que j'ai vu est lent. Il vaut mieux utiliser un cadre de journalisation comme celui du package java.util.logging ou log4j . À l'aide de ces packages, vous pouvez configurer vos informations de journalisation pour inclure le contexte jusqu'au nom de la classe. Ensuite, chaque message de journal serait suffisamment unique pour savoir d'où il vient. En conséquence, votre code aura une variable 'logger' que vous appelez via
au lieu de
la source
Log4J vous permet d'inclure le numéro de ligne dans son modèle de sortie. Voir http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/PatternLayout.html pour plus de détails sur la façon de procéder (l'élément clé du modèle de conversion est "L"). Cependant, le Javadoc comprend les éléments suivants:
la source
Le code posté par @ simon.buchan fonctionnera ...
Mais si vous l'appelez dans une méthode, il retournera toujours le numéro de ligne de la ligne dans la méthode, utilisez donc plutôt l'extrait de code en ligne.
la source
Je recommanderais d'utiliser une boîte à outils de journalisation telle que log4j . La journalisation est configurable via les fichiers de propriétés lors de l'exécution, et vous pouvez activer / désactiver des fonctionnalités telles que la journalisation des numéros de ligne / nom de fichier.
En regardant le javadoc pour PatternLayout vous donne la liste complète des options - ce que vous recherchez, c'est% L.
la source
J'utilise cette petite méthode qui génère la trace et le numéro de ligne de la méthode qui l'a appelée.
Double-cliquez sur la sortie pour accéder à cette ligne de code source!
Vous devrez peut-être ajuster la valeur du niveau en fonction de l'endroit où vous placez votre code.
la source
Util
vient-il?Vous ne pouvez pas garantir la cohérence du numéro de ligne avec le code, surtout s'il est compilé pour la publication. Je ne recommanderais de toute façon pas d'utiliser les numéros de ligne à cette fin, il serait préférable de donner une charge utile de l'endroit où l'exception a été levée (la méthode triviale étant de définir le message pour inclure les détails de l'appel de méthode).
Vous voudrez peut-être considérer l'enrichissement des exceptions comme une technique pour améliorer la gestion des exceptions http://tutorials.jenkov.com/java-exception-handling/exception-enrichment.html
la source
S'il a été compilé pour la publication, ce n'est pas possible. Vous voudrez peut-être examiner quelque chose comme Log4J qui vous donnera automatiquement suffisamment d'informations pour déterminer assez précisément où le code enregistré s'est produit.
la source
d'abord la méthode générale (dans une classe utilitaire, dans un ancien code java1.4, vous devrez peut-être la réécrire pour java1.5 et plus)
Ensuite, la méthode utilitaire spécifique pour obtenir le bon stackElement:
la source
Voici l'enregistreur que nous utilisons.
il englobe Android Logger et affiche le nom de la classe, le nom de la méthode et le numéro de ligne.
http://www.hautelooktech.com/2011/08/15/android-logging/
la source
Regardez ce lien . Dans cette méthode, vous pouvez accéder à votre code de ligne lorsque vous double-cliquez sur la ligne de LogCat.
Vous pouvez également utiliser ce code pour obtenir le numéro de ligne:
la source
la source
Ceux-ci vous donnent tous les numéros de ligne de votre thread actuel et de votre méthode qui fonctionnent très bien si vous utilisez un try catch où vous attendez une exception. Mais si vous voulez attraper une exception non gérée, vous utilisez le gestionnaire d'exceptions non interceptées par défaut et le thread actuel renverra le numéro de ligne de la fonction de gestionnaire, pas la méthode de classe qui a levé l'exception. Au lieu d'utiliser Thread.currentThread (), utilisez simplement le Throwable transmis par le gestionnaire d'exceptions:
Dans ce qui précède, utilisez e.getStackTrace () [0] dans votre fonction de gestionnaire (fShowUncaughtMessage) pour obtenir le contrevenant.
la source
Le code ci-dessous est un code testé pour la ligne de journalisation sans nom de classe et nom de méthode à partir de laquelle la méthode de journalisation est appelée
la source
le
stackLevel
dépend de la profondeur que vous appelez cette méthode. Vous pouvez essayer de 0 à un grand nombre pour voir quelle différence.Si
stackLevel
c'est légal, vous obtiendrez une chaîne commejava.lang.Thread.getStackTrace(Thread.java:1536)
la source
C'est exactement la fonctionnalité que j'ai implémentée dans cette lib XDDLib . (Mais c'est pour Android)
Un clic sur le texte souligné pour accéder à la commande de journal
Cela
StackTraceElement
est déterminé par le premier élément en dehors de cette bibliothèque. Ainsi, partout en dehors de cette lib sera légale, y comprislambda expression
,static initialization block
etc.la source
Ma façon dont ça marche pour moi
la source
vous pouvez utiliser -> Reporter.log ("");
la source