logcatにURLが出力されることについて
久々に書いてみます。
例えば、某端末にてブラウザでamazonにアクセスすると、logcatには
D/RequestQueue.getProxyHost(HttpHost)( 5312): host=http://www.amazon.co.jp mNonProxy=null
というのが出力されるのですね。これって一体何の為に出しているのでしょう。
悪意のあるアプリが利用者のアクセス先を特定するため? 普通の使い方ではこのアクセス先がlogcatに出力されることは好ましくないのではと思いました。
気になったのでOS2.3のソースコードを見てみると、
/frameworks/base/core/java/android/net/http/HttpLog.java
class HttpLog { private final static String LOGTAG = "http"; private static final boolean DEBUG = false; static final boolean LOGV = DEBUG ? Config.LOGD : Config.LOGV; static void v(String logMe) { Log.v(LOGTAG, SystemClock.uptimeMillis() + " " + Thread.currentThread().getName() + " " + logMe); } static void e(String logMe) { Log.e(LOGTAG, logMe); } }
/frameworks/base/core/java/android/net/http/RequestQueue.java
private synchronized void setProxyConfig() { NetworkInfo info = mConnectivityManager.getActiveNetworkInfo(); if (info != null && info.getType() == ConnectivityManager.TYPE_WIFI) { mProxyHost = null; } else { String host = Proxy.getHost(mContext); if (HttpLog.LOGV) HttpLog.v("RequestQueue.setProxyConfig " + host); if (host == null) { mProxyHost = null; } else { mActivePool.disablePersistence(); mProxyHost = new HttpHost(host, Proxy.getPort(mContext), "http"); } } }
という感じでいずれにせよログ出力が可能なようになっているようです。
このHttp.Log.javaはRequestQueue.java などから呼ばれ、実際にはこちらで制御をしているものと思いました。
ただ、以下はOS4.0.1のものですが、
class HttpLog { private final static String LOGTAG = "http"; private static final boolean DEBUG = false; static final boolean LOGV = false; static void v(String logMe) { Log.v(LOGTAG, SystemClock.uptimeMillis() + " " + Thread.currentThread().getName() + " " + logMe); } static void e(String logMe) { Log.e(LOGTAG, logMe); } }
と変更されており、ログ出力制御が変わっていることでlogcatにもURLが出て来なくなったのではと思いました。