106 votes

Comment procédez-vous habituellement pour étiqueter les entrées du journal ? (Android)

Je suppose que la plupart d'entre vous connaissent Android.util.Log Toutes les méthodes de journalisation acceptent 'String tag' comme premier argument.

Et ma question est la suivante Comment marquez-vous habituellement vos journaux dans vos applications ? J'ai vu des codes en dur de ce type :

public class MyActivity extends Activity {
    private static final String TAG = "MyActivity";
    //...
    public void method () {
        //...
        Log.d(TAG, "Some logging");
    }
}

Cette situation n'est pas agréable pour de nombreuses raisons :

  • Vous pouvez me dire que ce code n'a pas de hardcode, mais c'est le cas.
  • Mon application pourrait avoir un nombre quelconque de classes dans différents paquets avec le même nom. Il serait donc difficile de lire le journal.
  • Il n'est pas flexible. Vous devez toujours mettre un champ privé TAG dans votre classe.

Existe-t-il un moyen efficace d'obtenir un TAG pour une classe ?

193voto

gianpi Points 1024

J'utilise un TAG, mais je l'initialise comme suit :

private static final String TAG = MyActivity.class.getName();

Ainsi, lorsque je remanie mon code, la balise est également modifiée en conséquence.

18voto

Nicolas Manzini Points 2205

Aller à Android Studio -> préférences -> Live Templates -> AndroidLog puis sélectionnez Log.d(TAG, String) .

En Texte modèle remplacer

android.util.Log.d(TAG, "$METHOD_NAME$: $content$");

avec

android.util.Log.d("$className$", "$METHOD_NAME$: $content$");

Image of Android menu

Cliquez ensuite sur Modifier les variables et saisissez className() dans le champ Expression à côté du nom de la classe Nom colonne. image of Android menu 2

Désormais, lorsque vous tapez le raccourci logd il mettra

Log.d("CurrentClassName", "currentMethodName: ");

Il n'est plus nécessaire de définir un TAG.

17voto

Yaniv Points 84

Je crée généralement un App qui se trouve dans un autre paquetage et qui contient des méthodes statiques utiles. L'une de ces méthodes est un getTag() de cette manière, je peux obtenir le TAG partout.
App ressemble à ceci :

EDIT : Amélioré par le commentaire de br mob ( Merci :) )

public class App {

    public static String getTag() {
        String tag = "";
        final StackTraceElement[] ste = Thread.currentThread().getStackTrace();
        for (int i = 0; i < ste.length; i++) {
            if (ste[i].getMethodName().equals("getTag")) {
                tag = "("+ste[i + 1].getFileName() + ":" + ste[i + 1].getLineNumber()+")";
            }
        }
        return tag;
    }

}

Et quand je veux l'utiliser :

Log.i(App.getTag(), "Your message here");

La sortie du getTag est le nom de la classe appelante (avec le nom du paquetage), et le numéro de ligne où la méthode getTag est appelé, ce qui facilite le débogage.

9voto

br mob Points 91

J'aime améliorer la réponse de Yaniv Si vous avez le journal dans ce format (nom de fichier.java:XX) xx numéro de ligne vous pouvez lier le raccourci de la même manière qu'il est lié quand il y a une erreur, de cette façon je peux aller directement à la ligne en question juste en cliquant sur le logcat.

Je l'ai placé dans mon application étendue afin de pouvoir l'utiliser dans tous les autres fichiers.

public static String getTag() {
    String tag = "";
    final StackTraceElement[] ste = Thread.currentThread().getStackTrace();
    for (int i = 0; i < ste.length; i++) {
        if (ste[i].getMethodName().equals("getTag")) {
            tag = "("+ste[i + 1].getFileName() + ":" + ste[i + 1].getLineNumber()+")";
        }
    }
    return tag;
}

Capture d'écran :

3voto

Hemaolle Points 512

AndroidStudio dispose d'une fonction logt par défaut (vous pouvez taper logt et appuyez sur la touche de tabulation pour qu'il se développe en un fragment de code) . Je recommande d'utiliser cette méthode pour éviter de copier-coller la définition du TAG d'une autre classe et d'oublier de changer la classe à laquelle vous faites référence. Le modèle s'étend par défaut à

private static final String TAG = "$CLASS_NAME$"

Pour éviter d'utiliser l'ancien nom de la classe après le remaniement, vous pouvez le remplacer par

private static final String TAG = $CLASS_NAME$.class.getSimpleName();

N'oubliez pas de vérifier le bouton "Modifier les variables" et de vous assurer que l'option CLASS_NAME est définie pour utiliser la variable className() et que l'option "Sauter si défini" est cochée.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X