通常の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にログが表示されません。
何か不足していますか?
ここに解決策があります(詳細を掘り下げることはありません)
コンソール:
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");
以前のコメントは無視してください。 org.Apache.httpロギングページで解決策を見つけました。あなたの元の答えは httpclient-3.x logging を参照しており、最近のバージョンの作業コードは http-components logging から来ています
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
違いは、ロギングタグ名にあります。
あなただけを使用する必要があります
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」クラスのロギングを有効にしたい場合は、以下のようにします。
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シェルで
setprop log.tag.DefaultRequestDirector VERBOSE
悪魔は細部にいた。私は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
したがって、ログ指定子は異なるようです。