Как включить ведение журнала для Apache Commons HttpClient на Android - PullRequest
30 голосов
/ 14 июля 2010

Чтобы включить ведение журнала для общих Apache HttpClient в обычном приложении Java, я использовал:

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

Но на андроиде я не вижу логов в LogCat.

Я что-то упустил?

Ответы [ 4 ]

61 голосов
/ 21 июля 2010

Игнорировать мой предыдущий комментарий.Я нашел решение на странице регистрации org.apache.http.Ваш первоначальный ответ имел в виду httpclient-3.x logging , а рабочий код для последних версий взят из 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");

и свойств:

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

Разница заключается в именах тегов регистрации.

8 голосов
/ 15 июля 2010

Вот решение (без углубления в детали)

Консоль

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

Код:

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

Тест:

java.util.logging.Logger.getLogger("httpclient.wire.content").log(java.util.logging.Level.CONFIG, "hola");
3 голосов
/ 21 ноября 2012

Вам просто нужно использовать

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

и

adb shell setprop log.tag.correspondingTag VERBOSE

Android использует эту функцию, чтобы получить соответствующий тег из полного имени класса:

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

Пример , Я хочу включить ведение журнала для класса «org.apache.http.impl.client.DefaultRequestDirector» ,:

3 голосов
/ 06 февраля 2012

Дьявол кроется в деталях.Я использую эмулятор 2.3.3, и он работает с:

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

и в оболочке adb

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

Таким образом, похоже, что спецификаторы журнала отличаются.

...