android - एंड्रॉइड पर apache commons HttpClient के लिए लॉगिंग कैसे सक्षम करें




apache-commons-httpclient (3)

आपको बस उपयोग करने की ज़रूरत है

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

तथा

adb shell setprop log.tag.correspondingTag VERBOSE

एंड्रॉइड इस फ़ंक्शन का उपयोग क्लास पूर्ण नाम से संबंधितटैग प्राप्त करने के लिए करता है:

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

और फिर एडीबी खोल में

setprop log.tag.DefaultRequestDirector VERBOSE

सामान्य जावा एप्लिकेशन में अपाचे कॉमन्स HttpClient के लिए लॉगिंग सक्षम करने के लिए मैंने उपयोग किया:

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

लेकिन एंड्रॉइड पर मुझे लॉगकैट में लॉग नहीं दिख रहे हैं।

क्या मैं कुछ भूल रहा हूँ?


दुष्ट का विस्तार में वर्णन। मैं 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);

और एडब खोल में

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

इस प्रकार ऐसा लगता है कि लॉग विनिर्देशक अलग हैं।


यहां एक समाधान है (विवरण में खोदने के बिना)

कंसोल:

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




apache-commons-httpclient