• 封装一个简单好用的打印Log的工具类And快速开发系列 10个常用工具类


    快速开发系列 10个常用工具类

    http://blog.csdn.net/lmj623565791/article/details/38965311

    ------------------------------------------------------------------------------------------------

    不知众多Android开发者是否在程序开发的工程中也遇到过下面的问题:

    0.如何在众多log中快速找到你设置打印的那行log?

    1.是否还在不断的切换标签来查看使用不同TAG标签打印的log?

    2.找到需要的log后是否苦恼不能快速定位到Java源代码中查看?

    起初我也和大多数Android开发者一样,使用官方的打印log的方法,设置TAG,在Eclipse里面设置过滤标签,切换来回的看Log,可是这样却效率很低,会遇到上面所述的问题,那么现在我就把学习到的一种方便快捷的打印Log的方法分享给大家,有不对的地方还望不吝赐教,谢谢。

    Log类具有的功能

    0.使用一个标签来标记当前的AP(避免设置过多的TAG来过滤显示不同Java文件下的Log)

    1.支持多用户打印Log(在AP比较大,文件比较多,每人负责的模块不同时,可以使用自己的log来打印,这样看log的时候可以快速筛选出当前AP中你所设置的Log,比如只看     kesen的log就可以在Eclipse的filter里面输入kesen,这样显示的就都是你的log了)

    2.显示当前的线程名

    3.显示当前的Java文件与打印log的行号,便于快速定位到源文件

    4.显示当前是在那个方法体里面

    5.最后显示你设置打印出来的信息

    下面是一个打印Log的工具类:

    1. /** 
    2.  * The class for print log 
    3.  * @author kesenhoo 
    4.  * 
    5.  */  
    6. public class MyLogger  
    7. {  
    8.     private final static boolean                logFlag         = true;  
    9.       
    10.     public final static String                  tag             = "[AppName]";  
    11.     private final static int                    logLevel        = Log.VERBOSE;  
    12.     private static Hashtable<String, MyLogger>    sLoggerTable    = new Hashtable<String, MyLogger>();  
    13.     private String                              mClassName;  
    14.       
    15.     private static MyLogger                     jlog;  
    16.     private static MyLogger                     klog;  
    17.       
    18.     private static final String                 JAMES           = "@james@ ";  
    19.     private static final String                 KESEN           = "@kesen@ ";  
    20.       
    21.     private MyLogger(String name)  
    22.     {  
    23.         mClassName = name;  
    24.     }  
    25.       
    26.     /** 
    27.      *  
    28.      * @param className 
    29.      * @return 
    30.      */  
    31.     @SuppressWarnings("unused")  
    32.     private static MyLogger getLogger(String className)  
    33.     {  
    34.         MyLogger classLogger = (MyLogger) sLoggerTable.get(className);  
    35.         if(classLogger == null)  
    36.         {  
    37.             classLogger = new MyLogger(className);  
    38.             sLoggerTable.put(className, classLogger);  
    39.         }  
    40.         return classLogger;  
    41.     }  
    42.       
    43.     /** 
    44.      * Purpose:Mark user one 
    45.      * @return 
    46.      */  
    47.     public static MyLogger kLog()  
    48.     {  
    49.         if(klog == null)  
    50.         {  
    51.             klog = new MyLogger(KESEN);  
    52.         }  
    53.         return klog;  
    54.     }  
    55.     /** 
    56.      * Purpose:Mark user two 
    57.      * @return 
    58.      */  
    59.     public static MyLogger jLog()  
    60.     {  
    61.         if(jlog == null)  
    62.         {  
    63.             jlog = new MyLogger(JAMES);  
    64.         }  
    65.         return jlog;  
    66.     }  
    67.       
    68.     /** 
    69.      * Get The Current Function Name 
    70.      * @return 
    71.      */  
    72.     private String getFunctionName()  
    73.     {  
    74.         StackTraceElement[] sts = Thread.currentThread().getStackTrace();  
    75.         if(sts == null)  
    76.         {  
    77.             return null;  
    78.         }  
    79.         for(StackTraceElement st : sts)  
    80.         {  
    81.             if(st.isNativeMethod())  
    82.             {  
    83.                 continue;  
    84.             }  
    85.             if(st.getClassName().equals(Thread.class.getName()))  
    86.             {  
    87.                 continue;  
    88.             }  
    89.             if(st.getClassName().equals(this.getClass().getName()))  
    90.             {  
    91.                 continue;  
    92.             }  
    93.             return mClassName + "[ " + Thread.currentThread().getName() + ": "  
    94.                     + st.getFileName() + ":" + st.getLineNumber() + " "  
    95.                     + st.getMethodName() + " ]";  
    96.         }  
    97.         return null;  
    98.     }  
    99.       
    100.     /** 
    101.      * The Log Level:i 
    102.      * @param str 
    103.      */  
    104.     public void i(Object str)  
    105.     {  
    106.         if(logFlag)  
    107.         {  
    108.             if(logLevel <= Log.INFO)  
    109.             {  
    110.                 String name = getFunctionName();  
    111.                 if(name != null)  
    112.                 {  
    113.                     Log.i(tag, name + " - " + str);  
    114.                 }  
    115.                 else  
    116.                 {  
    117.                     Log.i(tag, str.toString());  
    118.                 }  
    119.             }  
    120.         }  
    121.           
    122.     }  
    123.       
    124.     /** 
    125.      * The Log Level:d 
    126.      * @param str 
    127.      */  
    128.     public void d(Object str)  
    129.     {  
    130.         if(logFlag)  
    131.         {  
    132.             if(logLevel <= Log.DEBUG)  
    133.             {  
    134.                 String name = getFunctionName();  
    135.                 if(name != null)  
    136.                 {  
    137.                     Log.d(tag, name + " - " + str);  
    138.                 }  
    139.                 else  
    140.                 {  
    141.                     Log.d(tag, str.toString());  
    142.                 }  
    143.             }  
    144.         }  
    145.     }  
    146.       
    147.     /** 
    148.      * The Log Level:V 
    149.      * @param str 
    150.      */  
    151.     public void v(Object str)  
    152.     {  
    153.         if(logFlag)  
    154.         {  
    155.             if(logLevel <= Log.VERBOSE)  
    156.             {  
    157.                 String name = getFunctionName();  
    158.                 if(name != null)  
    159.                 {  
    160.                     Log.v(tag, name + " - " + str);  
    161.                 }  
    162.                 else  
    163.                 {  
    164.                     Log.v(tag, str.toString());  
    165.                 }  
    166.             }  
    167.         }  
    168.     }  
    169.       
    170.     /** 
    171.      * The Log Level:w 
    172.      * @param str 
    173.      */  
    174.     public void w(Object str)  
    175.     {  
    176.         if(logFlag)  
    177.         {  
    178.             if(logLevel <= Log.WARN)  
    179.             {  
    180.                 String name = getFunctionName();  
    181.                 if(name != null)  
    182.                 {  
    183.                     Log.w(tag, name + " - " + str);  
    184.                 }  
    185.                 else  
    186.                 {  
    187.                     Log.w(tag, str.toString());  
    188.                 }  
    189.             }  
    190.         }  
    191.     }  
    192.       
    193.     /** 
    194.      * The Log Level:e 
    195.      * @param str 
    196.      */  
    197.     public void e(Object str)  
    198.     {  
    199.         if(logFlag)  
    200.         {  
    201.             if(logLevel <= Log.ERROR)  
    202.             {  
    203.                 String name = getFunctionName();  
    204.                 if(name != null)  
    205.                 {  
    206.                     Log.e(tag, name + " - " + str);  
    207.                 }  
    208.                 else  
    209.                 {  
    210.                     Log.e(tag, str.toString());  
    211.                 }  
    212.             }  
    213.         }  
    214.     }  
    215.       
    216.     /** 
    217.      * The Log Level:e 
    218.      * @param ex 
    219.      */  
    220.     public void e(Exception ex)  
    221.     {  
    222.         if(logFlag)  
    223.         {  
    224.             if(logLevel <= Log.ERROR)  
    225.             {  
    226.                 Log.e(tag, "error", ex);  
    227.             }  
    228.         }  
    229.     }  
    230.       
    231.     /** 
    232.      * The Log Level:e 
    233.      * @param log 
    234.      * @param tr 
    235.      */  
    236.     public void e(String log, Throwable tr)  
    237.     {  
    238.         if(logFlag)  
    239.         {  
    240.             String line = getFunctionName();  
    241.             Log.e(tag, "{Thread:" + Thread.currentThread().getName() + "}"  
    242.                     + "[" + mClassName + line + ":] " + log + " ", tr);  
    243.         }  
    244.     }  
    245. }  
    1.   


    关于里面的代码就不做解释了,大家看看应该差不多

    使用案例:
    这是我写的一个简单的带有一个button与textview的Activity,演示一下点击button与Activity的常规生命周期。

    1. import android.app.Activity;  
    2. import android.os.Bundle;  
    3. import android.view.View;  
    4. import android.view.View.OnClickListener;  
    5. import android.widget.Button;  
    6.   
    7. public class ActivityMain extends Activity  
    8. {  
    9.     private MyLogger logger = MyLogger.kLog();  
    10.     private MyLogger logger2 = MyLogger.jLog();  
    11.       
    12.     @Override  
    13.     protected void onCreate(Bundle savedInstanceState)  
    14.     {  
    15.         // TODO Auto-generated method stub  
    16.         super.onCreate(savedInstanceState);  
    17.         logger.i("This is log [01]");  
    18.         setContentView(R.layout.main);  
    19.           
    20.         Button button = (Button) this.findViewById(R.id.button);  
    21.         button.setOnClickListener(new OnClickListener() {  
    22.               
    23.             @Override  
    24.             public void onClick(View arg0)  
    25.             {  
    26.                 // TODO Auto-generated method stub  
    27.                 logger2.i("This is James action button.OnClick");  
    28.             }  
    29.         });  
    30.     }  
    31.       
    32.     @Override  
    33.     protected void onResume()  
    34.     {  
    35.         // TODO Auto-generated method stub  
    36.         super.onResume();  
    37.         logger.d("This is kesen log [02]");  
    38.     }  
    39.       
    40.     @Override  
    41.     protected void onPause()  
    42.     {  
    43.         // TODO Auto-generated method stub  
    44.         super.onPause();  
    45.         logger.w("This is kesen log [03]");  
    46.     }  
    47.   
    48.     @Override  
    49.     protected void onStop()  
    50.     {  
    51.         // TODO Auto-generated method stub  
    52.         super.onStop();  
    53.         logger.v("This is kesen log [04]");  
    54.     }  
    55.       
    56.     @Override  
    57.     protected void onDestroy()  
    58.     {  
    59.         // TODO Auto-generated method stub  
    60.         super.onDestroy();  
    61.         logger.e("This is kesen log [05]");  
    62.     }  
    63. }  

    下面是用这个log工具类打印出来的Log效果:

    从上面的解释差不多可以看出这个Log工具类具有的功能:
    0.使用一个标签来标记当前的AP
    1.支持多用户打印Log(在AP比较大,文件比较多,每人负责的模块不同时,可以使用自己的log来打印,这样看log的时候可以快速筛选出当前AP中你所设置的Log,比如只看     kesen的log就可以在Eclipse的filter里面输入kesen,这样显示的就都是你的log了)
    2.显示当前的线程名
    3.显示当前的Java文件与打印log的行号,便于快速定位到源文件
    4.显示当前是在那个方法体里面
    5.最后显示你设置打印出来的信息


    写的不好,有不对的地方还请见谅,谢谢!

  • 相关阅读:
    《失业的程序员》(十):分歧的产生
    《失业的程序员》(九):创业就是一场戏
    使用MySQL处理百万级以上数据时,不得不知道的几个常识
    《失业的程序员》(八):创业的要素
    《失业的程序员》(七):梦想和胸襟-正文
    《失业的程序员》(六):加班
    《失业的程序员》(五):商战之前
    《失业的程序员》(四):关于猪刚烈
    《失业的程序员》(二):酒后的第一桶金
    《失业的程序员》(三):口才帝和表情帝
  • 原文地址:https://www.cnblogs.com/ArRan/p/4829422.html
Copyright © 2020-2023  润新知