Cómo habilitar el registro de apache commons HttpClient en Android

Para habilitar el registro de apache commons HttpClient en condiciones normales de aplicación de Java que utiliza:

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");

Pero en android no puedo ver los registros en el LogCat.

Que me estoy perdiendo algo?

InformationsquelleAutor alex2k8 | 2010-07-14

4 Kommentare

  1. 61

    Ignorar mi comentario anterior. He encontrado la solución en la org.apache.http de la página registro. Su respuesta original se refería a httpclient-3.x registro de, y el código de trabajo para las versiones recientes proviene de http-componentes de registro

    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");

    y propiedades:

    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 diferencia está en el registro de los nombres de las etiquetas.

    • Gracias su por esta investigación
    • Has sido capaz de conseguir contexto de registro para el trabajo? Traté de extender su solución con líneas similares para la org.apache.http.impl.cliente registrador, pero no estoy viendo nada de las clases en el paquete o subpaquete. Me pongo el cable y el encabezado de registro sin embargo.
    • En serio. Gracias por este.
    • funciona muy bien! Esto sin duda debe ser aceptado respuesta.
    • Por qué usted necesita para establecer el adb shell propiedades?
    • También, ver las cabeceras, sólo que esta línea era necesario: java.util.logging.Logger.getLogger("org.apache.http.headers").setLevel(java.util.logging.Level.FINEST);. No tenía la necesidad de establecer cualquier sistema java de la propiedad.
    • Las líneas se acaba de mostrar lo que puede se establezca si desea partes del registro. Si usted sólo tiene uno de los registro de etiquetas, a continuación, sólo tiene que establecer que uno. Setprop se utiliza para asegurarse de que el «httpclient.de alambre.encabezado de» etiqueta pone conectado. Si usted quiere cambiar el comportamiento del registro (o deshabilitar el registro completo), usted podría usar ese comando para cambiar el nivel en el que logcat para mostrar a los registros.
    • Está usted sugiriendo que el disco duro de código en la aplicación? Seguramente el punto de ajuste de este fuera de la aplicación es por lo que el registro es configurable! Por favor, podrías explicar lo que están haciendo en más detalle o mejor aún, se proporciona un ejemplo en github? Gracias!

  2. 8

    Aquí es una solución de (sin necesidad de profundizar en los detalles)

    Consola:

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

    Código:

    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);

    Prueba:

    java.util.logging.Logger.getLogger("httpclient.wire.content").log(java.util.logging.Level.CONFIG, "hola");
    • He intentado esto en mi aplicación, y no estoy viendo ningún registro de los mensajes entregados desde el HttpClient. Funciona mediante el HttpClient que es en la actual SDK? Que es, org.apache.http, vs org.apache.commons.http. Veo la prueba de mensaje de registro («hola» en el ejemplo), pero nada de la HttpClient llamadas.
    • con la reciente Sdk que usted necesita para utilizar el prefijo utilizado en la primera respuesta, «org.apache.http» en lugar de «httpclient», al menos esto funcionó para mí en un Dispositivo 2.1.
    • Por qué usted necesita para establecer el adb shell propiedades?
    • Sabes por casualidad si hay una manera de ver con MÁS detalle de lo que se obtiene con habilitar el modo de DEPURACIÓN en el cable? Como bajo el nivel de información de TCP?
  3. 3

    El diablo está en los detalles. Estoy corriendo la 2.3.3 emulador y tengo trabajo con:

    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);

    y en el adb shell

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

    Por lo tanto parece que el registro de los especificadores son diferentes.

  4. 3

    Usted sólo tiene que utilizar

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

    y

    adb shell setprop log.tag.correspondingTag VERBOSE

    Android utilice esta función para obtener correspondingTag de la clase nombre completo:

    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);
      }

    así, por ejemplo,quiero habilitar el registro para «org.apache.http.impl.cliente.DefaultRequestDirector» clase,hacer tales cosas a continuación:

    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")
    }

    Y, a continuación, en el adb shell

    setprop log.tag.DefaultRequestDirector VERBOSE

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea