33 votes

Comment activer la journalisation pour Apache Commons HttpClient sur Android

Pour activer la journalisation pour Apache commons HttpClient dans une application Java normale, j'ai utilisé:

 System.setProperty("org.apache.commons.logging.Log", "org.apache.commons.logging.impl.SimpleLog");
System.setProperty("org.apache.commons.logging.simplelog.showdatetime", "true");
System.setProperty("org.apache.commons.logging.simplelog.log.httpclient.wire", "debug");
System.setProperty("org.apache.commons.logging.simplelog.log.org.apache.commons.httpclient", "debug");
 

Mais sur Android, je ne vois pas les journaux dans LogCat.

Suis-je en train de manquer quelque chose?

65voto

Joe Points 20463

Ignorez mon commentaire précédent. J'ai trouvé la solution sur la page de journalisation org.apache.http. Votre réponse d'origine faisait référence à la journalisation httpclient-3.x , et le code de travail pour les versions récentes provient de la journalisation des composants http

 java.util.logging.Logger.getLogger("org.apache.http.wire").setLevel(java.util.logging.Level.FINEST);
java.util.logging.Logger.getLogger("org.apache.http.headers").setLevel(java.util.logging.Level.FINEST);

System.setProperty("org.apache.commons.logging.Log", "org.apache.commons.logging.impl.SimpleLog");
System.setProperty("org.apache.commons.logging.simplelog.showdatetime", "true");
System.setProperty("org.apache.commons.logging.simplelog.log.httpclient.wire", "debug");
System.setProperty("org.apache.commons.logging.simplelog.log.org.apache.http", "debug");
System.setProperty("org.apache.commons.logging.simplelog.log.org.apache.http.headers", "debug");
 

et propriétés:

 adb shell setprop log.tag.org.apache.http VERBOSE
adb shell setprop log.tag.org.apache.http.wire VERBOSE
adb shell setprop log.tag.org.apache.http.headers VERBOSE
 

La différence réside dans les noms des balises de journalisation.

9voto

alex2k8 Points 12225

Voici une solution (sans creuser dans les détails)

Console:

 adb shell setprop log.tag.httpclient.wire.header VERBOSE
adb shell setprop log.tag.httpclient.wire.content VERBOSE
 

Code:

 java.util.logging.Logger.getLogger("httpclient.wire.header").setLevel(java.util.logging.Level.FINEST);
java.util.logging.Logger.getLogger("httpclient.wire.content").setLevel(java.util.logging.Level.FINEST);
 

Tester:

 java.util.logging.Logger.getLogger("httpclient.wire.content").log(java.util.logging.Level.CONFIG, "hola");
 

3voto

Michael Points 31

Le diable est dans les détails. J'utilise l'émulateur 2.3.3 et je l'ai fait fonctionner avec:

 java.util.logging.Logger.getLogger("org.apache.http.wire").setLevel(java.util.logging.Level.FINEST);
java.util.logging.Logger.getLogger("org.apache.http.headers").setLevel(java.util.logging.Level.FINEST);
 

et dans le shell adb

 # setprop log.tag.org.apache.http.wire VERBOSE
# setprop log.tag.org.apache.http.headers VERBOSE
 

Il semble donc que les spécificateurs de journaux soient différents.

3voto

nut Points 120

Vous avez juste besoin d'utiliser

 java.util.logging.Logger.getLogger(yourFullClassName).setLevel(java.util.logging.Level.All);
 

et

 adb shell setprop log.tag.correspondingTag VERBOSE
 

Android utilise cette fonction pour obtenir le tag correspondant du nom complet de la classe:

 public static String loggerNameToTag(String loggerName)
  {
    if (loggerName == null) {
      return "null";
    }

    int length = loggerName.length();
    if (length <= 23) {
      return loggerName;
    }

    int lastPeriod = loggerName.lastIndexOf(".");
    return length - (lastPeriod + 1) <= 23 ? loggerName.substring(lastPeriod + 1) : loggerName.substring(loggerName.length() - 23);
  }
 

ainsi, par exemple , Je souhaite activer la journalisation pour la classe "org.apache.http.impl.client.DefaultRequestDirector" , procédez comme suit:

 String clzName = "org.apache.http.impl.client.DefaultRequestDirector";
String newClzName = loggerNameToTag(clzName);
System.out.println("className:" + clzName + " tagName is " + newClzName);    //get tagName from class full name,and then it will be used in setprop
Logger jdkLogger = Logger.getLogger(clzName);
jdkLogger.setLevel(Level.ALL);
if (jdkLogger.isLoggable(Level.FINE))
{
        jdkLogger.log(Level.FINE, "jdk log msg");    
        jdkLogger.log(Level.Fine,"tagName is")
}
 

Et puis dans adb shell

 setprop log.tag.DefaultRequestDirector VERBOSE
 

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