Как включить ведение журнала для apache commons HttpClient на Android



2 Answers

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

Консоль:

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");
android apache-commons-httpclient

Чтобы включить ведение журнала для apache commons 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");

Но на android я не вижу журналы в LogCat.

Я что-то упускаю?




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

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

а также

adb shell setprop log.tag.correspondingTag VERBOSE

Android использует эту функцию для получения соответствующего Tag из полного имени класса:

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, выполните следующие действия:

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

А затем в adb shell

setprop log.tag.DefaultRequestDirector VERBOSE



Related