一、Android原生android.util.Log类
Android原生的Log类是http://androidxref.com/9.0.0_r3/xref/frameworks/base/core/java/android/util/Log.java#144
最终会调用native方法,传递的参数有:bufID(对应不同的MAIN/RADIO/EVENTS/SYSTEM/CRASH buffer), priority(VERBOSE < DEBUG < INFO < WARN < ERROR, 默认大于等于INFO的log会被打印出来,其它等级的log可以通过log.tag.LOG_TAG = VERBOSE等方法打开)
144 public static int d(String tag, String msg) {
145 return println_native(LOG_ID_MAIN, DEBUG, tag, msg);
146 }
373 /** @hide */ public static native int println_native(int bufID,
374 int priority, String tag, String msg);
我们可以通过如下两种方式使用:
- import导包+调用Log.d
7import android.util.Log;
15 Log.d(TAG, "excessive I/O activity detected.");
27 android.util.Log.i("WebViewShell", "WebViewStartupTimeMillis=" + (t2 - t1));
二、TeleService,Telecom,Dialer里的自定义Log
1. TeleService
不导包,直接默认会调用同包下的Log(TeleService - > framework):
android.services.telephony.Log#d -> android.telecom.Log#d
其间,会调用到原生的Log#isLoggable判断Log的等级情况(方法见上)
105 Log.v(TelephonyConnection.this, "MSG_PRECISE_CALL_STATE_CHANGED");
51 public static void d(String prefix, String format, Object... args) {
52 android.telecom.Log.d(prefix, format, args);
53 }
http://androidxref.com/9.0.0_r3/xref/frameworks/base/telecomm/java/android/telecom/Log.java#80
51 public static String TAG = "TelecomFramework";
52 public static boolean DEBUG = isLoggable(android.util.Log.DEBUG);
53 public static boolean INFO = isLoggable(android.util.Log.INFO);
54 public static boolean VERBOSE = isLoggable(android.util.Log.VERBOSE);
55 public static boolean WARN = isLoggable(android.util.Log.WARN);
56 public static boolean ERROR = isLoggable(android.util.Log.ERROR);
80 public static void d(String prefix, String format, Object... args) {
81 if (sIsUserExtendedLoggingEnabled) {
82 maybeDisableLogging();
83 android.util.Slog.i(TAG, buildMessage(prefix, format, args));
84 } else if (DEBUG) {
85 android.util.Slog.d(TAG, buildMessage(prefix, format, args));
86 }
87 }
367 public static boolean isLoggable(int level) {
368 return FORCE_LOGGING || android.util.Log.isLoggable(TAG, level);
369 }
【注意】
如果在TelephonyConnection里使用原生的Log类,要小心导包和调用Log方法两两配合使用,否则会出现异常。
2. Telecom
导包
47import android.telecom.Log;
488 Log.v(this, "onSuccessfulOutgoingCall, %s", call);
3. Dialer
同TeleService, 如果不声明导包,默认使用同包下的http://androidxref.com/9.0.0_r3/xref/packages/apps/Dialer/java/com/android/incallui/Log.java