logging c'est - Comment écrire des sorties dans la connexion à Android?




logcat quoi (7)

Je veux écrire une sortie de débogage dans le journal pour l'examiner avec logcat.

Si j'écris quelque chose à System.out cela est déjà affiché dans logcat.

Quelle est la manière propre d'écrire dans le journal et d'ajouter des niveaux et des étiquettes à ma sortie?


Answers

String one = object.getdata();
Log.d(one,"");

Utilisez android.util.Log et les méthodes statiques qui y sont définies (par exemple, e() , w() ).


Regardez dans android.util.Log . Il vous permet d'écrire dans le journal avec différents niveaux de journalisation, et vous pouvez spécifier des balises différentes pour regrouper la sortie. Par exemple

Log.w("myApp", "no network");

sortira un avertissement avec l'étiquette myApp et le message pas de réseau.


import android.util.Log;

et alors

Log.i("the your message will go here"); 

S'il vous plaît voir les journaux de cette façon,

Log.e("ApiUrl = ", "MyApiUrl") (error)
Log.w("ApiUrl = ", "MyApiUrl") (warning)
Log.i("ApiUrl = ", "MyApiUrl") (information)
Log.d("ApiUrl = ", "MyApiUrl") (debug)
Log.v("ApiUrl = ", "MyApiUrl") (verbose)

Récemment, j'ai trouvé cette approche à l'écriture de journaux dans Android, qui je pense est super génial.

public static final boolean FORCED_LOGGING = true;
private static final int CALLER_STACK_INDEX = 3;

public static void showLogs(String message) {
        if (FORCED_LOGGING) {
            StackTraceElement caller = Thread.currentThread().getStackTrace()[CALLER_STACK_INDEX];

            String fullClassName = caller.getClassName();
            String className = fullClassName.substring(fullClassName.lastIndexOf('.') + 1);
            String methodName = caller.getMethodName();
            int lineNumber = caller.getLineNumber();

            Log.i("*** " + className + "." + methodName + "():" + lineNumber + "\n" , message);
        }
    }

MISE À JOUR : Depuis les dernières versions d'Android, de nombreux problèmes liés à ANDROID_ID ont été résolus et je pense que cette approche n'est plus nécessaire. S'il vous plaît jeter un oeil à la réponse d'Anthony .

Divulgation complète: mon application utilisait à l'origine l'approche ci-dessous, mais ne l'utilise plus. Nous utilisons maintenant l'approche décrite dans l'entrée android-developers.blogspot.com/2011/03/… laquelle emmby renvoie (en particulier, générer et enregistrer un UUID#randomUUID() ).

Il existe de nombreuses réponses à cette question, dont la plupart ne fonctionneront que "certaines" fois, et malheureusement cela ne suffit pas.

Basé sur mes tests d'appareils (tous les téléphones, dont au moins un n'est pas activé):

  1. Tous les périphériques testés ont renvoyé une valeur pour TelephonyManager.getDeviceId()
  2. Tous les appareils GSM (tous testés avec une carte SIM) ont renvoyé une valeur pour TelephonyManager.getSimSerialNumber()
  3. Tous les périphériques CDMA ont renvoyé la valeur null pour getSimSerialNumber() (comme prévu)
  4. Tous les appareils avec un compte Google ajouté ont renvoyé une valeur pour ANDROID_ID
  5. Tous les périphériques CDMA ont renvoyé la même valeur (ou une dérivation de la même valeur) pour ANDROID_ID et TelephonyManager.getDeviceId() - tant qu'un compte Google a été ajouté lors de la configuration.
  6. Je n'ai pas encore eu la chance de tester des appareils GSM sans carte SIM, un appareil GSM sans compte Google ajouté, ni aucun des appareils en mode avion.

Donc, si vous voulez quelque chose d'unique sur le périphérique lui-même, TM.getDeviceId() devrait suffire. Il est évident que certains utilisateurs sont plus paranoïaques que d'autres. Il peut donc être utile de hacher un ou plusieurs de ces identifiants afin que la chaîne reste pratiquement unique pour le périphérique, mais n'identifie pas explicitement le périphérique réel de l'utilisateur. Par exemple, en utilisant String.hashCode() , combiné avec un UUID:

final TelephonyManager tm = (TelephonyManager) getBaseContext().getSystemService(Context.TELEPHONY_SERVICE);

final String tmDevice, tmSerial, androidId;
tmDevice = "" + tm.getDeviceId();
tmSerial = "" + tm.getSimSerialNumber();
androidId = "" + android.provider.Settings.Secure.getString(getContentResolver(), android.provider.Settings.Secure.ANDROID_ID);

UUID deviceUuid = new UUID(androidId.hashCode(), ((long)tmDevice.hashCode() << 32) | tmSerial.hashCode());
String deviceId = deviceUuid.toString();

peut aboutir à quelque chose comme: 00000000-54b3-e7c7-0000-000046bffd97

Cela fonctionne assez bien pour moi.

Comme Richard le mentionne ci-dessous, n'oubliez pas que vous avez besoin de l'autorisation pour lire les propriétés de TelephonyManager . Ajoutez donc ceci à votre manifeste:

<uses-permission android:name="android.permission.READ_PHONE_STATE" />

importer des libs

import android.content.Context;
import android.telephony.TelephonyManager;
import android.view.View;




android logging logcat