Android LOG標籤自定義
阿新 • • 發佈:2019-02-15
你如果不喜歡Android Debugger的LOG標籤(列印資訊不完整),你可以使用StackTraceElement在你的應用裡面實現簡單的LOG列印。你不需要使用System.out這個方法在程式中使用,你可以自己寫個LOG工具類來完成自己的列印需求。
下面是簡單的LogUtils類,提供了一些靜態方法,供大家參考。
Activity簡答的按鈕監聽事件。/** * @author wangli Log工具類 * */ public final class LogUtils { private static boolean sIsLogEnabled = true;// 是否開啟LOG private static String sApplicationTag = "LogDemo";// LOG預設TAG private static final String TAG_CONTENT_PRINT = "%s:%s.%s:%d"; private static StackTraceElement getCurrentStackTraceElement() { return Thread.currentThread().getStackTrace()[4]; } //列印LOG public static void trace() { if (sIsLogEnabled) { android.util.Log.d(sApplicationTag, getContent(getCurrentStackTraceElement())); } } //獲取LOG private static String getContent(StackTraceElement trace) { return String.format(TAG_CONTENT_PRINT, sApplicationTag, trace.getClassName(), trace.getMethodName(), trace.getLineNumber()); } //列印預設TAG的LOG public static void traceStack() { if (sIsLogEnabled) { traceStack(sApplicationTag, android.util.Log.ERROR); } } // 列印Log當前呼叫棧資訊 public static void traceStack(String tag, int priority) { if (sIsLogEnabled) { StackTraceElement[] stackTrace = Thread.currentThread().getStackTrace(); android.util.Log.println(priority, tag, stackTrace[4].toString()); StringBuilder str = new StringBuilder(); String prevClass = null; for (int i = 5; i < stackTrace.length; i++) { String className = stackTrace[i].getFileName(); int idx = className.indexOf(".java"); if (idx >= 0) { className = className.substring(0, idx); } if (prevClass == null || !prevClass.equals(className)) { str.append(className.substring(0, idx)); } prevClass = className; str.append(".").append(stackTrace[i].getMethodName()) .append(":").append(stackTrace[i].getLineNumber()) .append("->"); } android.util.Log.println(priority, tag, str.toString()); } } //指定TAG和指定內容的方法 public static void d(String tag, String msg) { if (sIsLogEnabled) { Log.d(tag, getContent(getCurrentStackTraceElement())+">"+msg); } } //預設TAG和制定內容的方法 public static void d(String msg) { if (sIsLogEnabled) { Log.d(sApplicationTag, getContent(getCurrentStackTraceElement())+">"+msg); } } //下面的定義和上面方法相同,可以定義不同等級的Debugger public static void i(String tag,String msg){ } public static void w(String tag,String msg){ } public static void e(String tag,String msg){ } }
Button mybutton = (Button) findViewById(R.id.mybutton);
mybutton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
LogUtils.trace();
LogUtils.d("test", "在這裡...");
}
});
列印結果
09-10 11:48:56.198: D/test(729): LogDemo:com.test.TestScreenActivity$1.onClick:35>在這裡... 09-10 11:48:56.238: D/test(729): LogDemo:com.test.TestScreenActivity$1.onClick:35>在這裡...
09-10 11:48:56.198: D/LogDemo(729): LogDemo:com.test.TestScreenActivity$1.onClick:34
09-10 11:48:56.230: D/LogDemo(729): LogDemo:com.test.TestScreenActivity$1.onClick:34
可以從LOG內容看出我們很容易的跟蹤程式碼執行,但是如果你的產品釋出,不要忘記了關閉LOG列印。