對於Android系統Log輸出日誌的封裝LogUtils

來源:互聯網
上載者:User

對於Android系統Log輸出日誌的封裝LogUtils
MainActivity如下:

package cc.cn.logutil;import android.os.Bundle;import android.app.Activity;/** * Demo描述: * 對於Android系統Log輸出日誌的封裝LogUtils * 1 可修改LogUtils中的LEVEL值覺得哪些層級的日誌可以輸出. *   所以方便選擇性輸出日誌或者屏蔽日誌輸出 * 2 輸出的日誌除了本想輸出的資訊外還包含了該日誌輸出時所屬 *   的線程,類,方法名,已經在該方法中的行數等實用資訊 * 3 LogUtils的調用方式 *   3.1 按照系統原方式調用 *   3.2 或者不設定TAG,則預設為檔案名稱 *    * 備忘說明: * 在該樣本中主要用到了StackTrace和StackTraceElement. * 詳情可參見上篇部落格《StackTrace簡述以及StackTraceElement使用執行個體》 *  * PS: * 今天有些感冒,有些發燒.下班後完成這個樣本,算是一種慰藉吧 * 2014年9月23日23:05:01. */public class MainActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);LogUtils.i("MainActivity", "onCreate1");LogUtils.i(null, "onCreate2");LogUtils.i("", "onCreate3");LogUtils.i("onCreate4");test();}private void test() {LogUtils.i("調用了MainActivity中的test()");TestLog.testLog();new Thread() {public void run() {LogUtils.i("調用了子線程");};}.start();}@Overrideprotected void onStart() {super.onStart();LogUtils.i("onStart");}@Overrideprotected void onResume() {super.onResume();LogUtils.i("onResume");}@Overrideprotected void onPause() {super.onPause();LogUtils.i("onPause");}@Overrideprotected void onStop() {super.onStop();LogUtils.i("onStop");}@Overrideprotected void onDestroy() {super.onDestroy();LogUtils.i("onDestroy");}}

LogUtils如下:
package cc.cn.logutil;import android.text.TextUtils;import android.util.Log;/** * LogUtils工具說明:  * 1 只輸出等級大於等於LEVEL的日誌  *   所以在開發和產品發布後通過修改LEVEL來選擇性輸出日誌. *   當LEVEL=NOTHING則屏蔽了所有的日誌.  * 2 v,d,i,w,e均對應兩個方法.  *   若不設定TAG或者TAG為空白則為設定預設TAG *  */public class LogUtils {public static final int VERBOSE = 1;public static final int DEBUG = 2;public static final int INFO = 3;public static final int WARN = 4;public static final int ERROR = 5;public static final int NOTHING = 6;public static final int LEVEL = VERBOSE;public static final String SEPARATOR = ",";public static void v(String message) {if (LEVEL <= VERBOSE) {StackTraceElement stackTraceElement = Thread.currentThread().getStackTrace()[3];String tag = getDefaultTag(stackTraceElement);Log.v(tag, getLogInfo(stackTraceElement) + message);}}public static void v(String tag, String message) {if (LEVEL <= VERBOSE) {StackTraceElement stackTraceElement = Thread.currentThread().getStackTrace()[3];if (TextUtils.isEmpty(tag)) {tag = getDefaultTag(stackTraceElement);}Log.v(tag, getLogInfo(stackTraceElement) + message);}}public static void d(String message) {if (LEVEL <= DEBUG) {StackTraceElement stackTraceElement = Thread.currentThread().getStackTrace()[3];String tag = getDefaultTag(stackTraceElement);Log.d(tag, getLogInfo(stackTraceElement) + message);}}public static void d(String tag, String message) {if (LEVEL <= DEBUG) {StackTraceElement stackTraceElement = Thread.currentThread().getStackTrace()[3];if (TextUtils.isEmpty(tag)) {tag = getDefaultTag(stackTraceElement);}Log.d(tag, getLogInfo(stackTraceElement) + message);}}public static void i(String message) {if (LEVEL <= INFO) {StackTraceElement stackTraceElement = Thread.currentThread().getStackTrace()[3];String tag = getDefaultTag(stackTraceElement);Log.i(tag, getLogInfo(stackTraceElement) + message);}}public static void i(String tag, String message) {if (LEVEL <= INFO) {StackTraceElement stackTraceElement = Thread.currentThread().getStackTrace()[3];if (TextUtils.isEmpty(tag)) {tag = getDefaultTag(stackTraceElement);}Log.i(tag, getLogInfo(stackTraceElement) + message);}}public static void w(String message) {if (LEVEL <= WARN) {StackTraceElement stackTraceElement = Thread.currentThread().getStackTrace()[3];String tag = getDefaultTag(stackTraceElement);Log.w(tag, getLogInfo(stackTraceElement) + message);}}public static void w(String tag, String message) {if (LEVEL <= WARN) {StackTraceElement stackTraceElement = Thread.currentThread().getStackTrace()[3];if (TextUtils.isEmpty(tag)) {tag = getDefaultTag(stackTraceElement);}Log.w(tag, getLogInfo(stackTraceElement) + message);}}public static void e(String tag, String message) {if (LEVEL <= ERROR) {StackTraceElement stackTraceElement = Thread.currentThread().getStackTrace()[3];if (TextUtils.isEmpty(tag)) {tag = getDefaultTag(stackTraceElement);}Log.e(tag, getLogInfo(stackTraceElement) + message);}}/** * 擷取預設的TAG名稱.  * 比如在MainActivity.java中調用了日誌輸出.  * 則TAG為MainActivity */public static String getDefaultTag(StackTraceElement stackTraceElement) {String fileName = stackTraceElement.getFileName();String stringArray[] = fileName.split("\\.");String tag = stringArray[0];return tag;}/** * 輸出日誌所包含的資訊 */public static String getLogInfo(StackTraceElement stackTraceElement) {StringBuilder logInfoStringBuilder = new StringBuilder();// 擷取線程名String threadName = Thread.currentThread().getName();// 擷取線程IDlong threadID = Thread.currentThread().getId();// 擷取檔案名稱.即xxx.javaString fileName = stackTraceElement.getFileName();// 擷取類名.即包名+類名String className = stackTraceElement.getClassName();// 擷取方法名稱String methodName = stackTraceElement.getMethodName();// 擷取生日輸出行數int lineNumber = stackTraceElement.getLineNumber();logInfoStringBuilder.append("[ ");logInfoStringBuilder.append("threadID=" + threadID).append(SEPARATOR);logInfoStringBuilder.append("threadName=" + threadName).append(SEPARATOR);logInfoStringBuilder.append("fileName=" + fileName).append(SEPARATOR);logInfoStringBuilder.append("className=" + className).append(SEPARATOR);logInfoStringBuilder.append("methodName=" + methodName).append(SEPARATOR);logInfoStringBuilder.append("lineNumber=" + lineNumber);logInfoStringBuilder.append(" ] ");return logInfoStringBuilder.toString();}}

TestLog如下:
package cc.cn.logutil;public class TestLog {     public static void testLog(){     LogUtils.i("調用了TestLog中的testLog()");     }}

main.xml如下:
    


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.