Android LOG标签自定义

来源:互联网 发布:花呗可以淘宝买东西吗 编辑:程序博客网 时间:2024/04/30 02:53

http://blog.csdn.net/lonely_fireworks/article/details/7962657


你如果不喜欢Android Debugger的LOG标签(打印信息不完整),你可以使用StackTraceElement在你的应用里面实现简单的LOG打印。你不需要使用System.out这个方法在程序中使用,你可以自己写个LOG工具类来完成自己的打印需求。

下面是简单的LogUtils类,提供了一些静态方法,供大家参考。

[cpp] view plaincopy
  1. /** 
  2.  * @author wangli Log工具类 
  3.  *  
  4.  */  
  5. public final class LogUtils {  
  6.   
  7.     private static boolean sIsLogEnabled = true;// 是否打开LOG  
  8.   
  9.     private static String sApplicationTag = "LogDemo";// LOG默认TAG  
  10.   
  11.     private static final String TAG_CONTENT_PRINT = "%s:%s.%s:%d";  
  12.   
  13.     private static StackTraceElement getCurrentStackTraceElement() {  
  14.         return Thread.currentThread().getStackTrace()[4];  
  15.   
  16.     }  
  17.   
  18.     //打印LOG  
  19.     public static void trace() {  
  20.         if (sIsLogEnabled) {  
  21.             android.util.Log.d(sApplicationTag,  
  22.                     getContent(getCurrentStackTraceElement()));  
  23.         }  
  24.     }  
  25.   
  26.     //获取LOG  
  27.     private static String getContent(StackTraceElement trace) {  
  28.         return String.format(TAG_CONTENT_PRINT, sApplicationTag,  
  29.                 trace.getClassName(), trace.getMethodName(),  
  30.                 trace.getLineNumber());  
  31.     }  
  32.     //打印默认TAG的LOG  
  33.     public static void traceStack() {  
  34.         if (sIsLogEnabled) {  
  35.             traceStack(sApplicationTag, android.util.Log.ERROR);  
  36.         }  
  37.     }  
  38.   
  39.     // 打印Log当前调用栈信息  
  40.     public static void traceStack(String tag, int priority) {  
  41.   
  42.         if (sIsLogEnabled) {  
  43.             StackTraceElement[] stackTrace = Thread.currentThread().getStackTrace();  
  44.             android.util.Log.println(priority, tag, stackTrace[4].toString());  
  45.             StringBuilder str = new StringBuilder();  
  46.             String prevClass = null;  
  47.             for (int i = 5; i < stackTrace.length; i++) {  
  48.                 String className = stackTrace[i].getFileName();  
  49.                 int idx = className.indexOf(".java");  
  50.                 if (idx >= 0) {  
  51.                     className = className.substring(0, idx);  
  52.                 }  
  53.                 if (prevClass == null || !prevClass.equals(className)) {  
  54.   
  55.                     str.append(className.substring(0, idx));  
  56.   
  57.                 }  
  58.                 prevClass = className;  
  59.                 str.append(".").append(stackTrace[i].getMethodName())  
  60.                         .append(":").append(stackTrace[i].getLineNumber())  
  61.                         .append("->");  
  62.             }  
  63.             android.util.Log.println(priority, tag, str.toString());  
  64.         }  
  65.     }  
  66.     //指定TAG和指定内容的方法  
  67.     public static void d(String tag, String msg) {  
  68.         if (sIsLogEnabled) {  
  69.             Log.d(tag, getContent(getCurrentStackTraceElement())+">"+msg);  
  70.         }  
  71.     }  
  72.     //默认TAG和制定内容的方法  
  73.     public static void d(String msg) {  
  74.         if (sIsLogEnabled) {  
  75.             Log.d(sApplicationTag, getContent(getCurrentStackTraceElement())+">"+msg);  
  76.         }  
  77.     }  
  78.     //下面的定义和上面方法相同,可以定义不同等级的Debugger  
  79.     public static void i(String tag,String msg){  
  80.           
  81.     }  
  82.     public static void w(String tag,String msg){  
  83.           
  84.     }  
  85.     public static void e(String tag,String msg){  
  86.           
  87.     }  
  88. }  
Activity简答的按钮监听事件。

[java] view plaincopy
  1. Button mybutton = (Button) findViewById(R.id.mybutton);  
  2. mybutton.setOnClickListener(new OnClickListener() {  
  3.   
  4.     @Override  
  5.     public void onClick(View v) {  
  6.     LogUtils.trace();  
  7.     LogUtils.d("test""在这里...");  
  8.     }  
  9. });  

打印结果

[plain] view plaincopy
  1. 09-10 11:48:56.198: D/test(729): LogDemo:com.test.TestScreenActivity$1.onClick:35>在这里...  
  2. 09-10 11:48:56.238: D/test(729): LogDemo:com.test.TestScreenActivity$1.onClick:35>在这里...  
[plain] view plaincopy
  1. 09-10 11:48:56.198: D/LogDemo(729): LogDemo:com.test.TestScreenActivity$1.onClick:34  
  2. 09-10 11:48:56.230: D/LogDemo(729): LogDemo:com.test.TestScreenActivity$1.onClick:34  
可以从LOG内容看出我们很容易的跟踪代码运行,但是如果你的产品发布,不要忘记了关闭LOG打印。
0 0
原创粉丝点击