相信众多android开发者在开发程序的过程中会经常用到Log打印信息

以方便了解当前程序的运行状况以及在出现BUG的时候能够快速定位问题

大多数童鞋会使用官方的打印log的方法,设置TAG然后在Eclipse里面设置过滤标签,切换来回的看Log但这样却效率很低;

下面分享一个Log打印信息的封装类,主要提供以下功能:

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

2.显示当前的线程ID,用于辨别主线程还是子线程

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

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

不罗嗦,上代码:

public class CommonLog {private String tag = "CommonLog";public static int logLevel = Log.VERBOSE;public static boolean isDebug = true;public CommonLog() { }public CommonLog(String tag) {this.tag = tag;}public void setTag(String tag) {this.tag = tag;}private String getFunctionName() {        StackTraceElement[] sts = Thread.currentThread().getStackTrace();                if (sts == null) {            return null;        }                        for (StackTraceElement st:sts) {            if (st.isNativeMethod()) {                continue;            }            if (st.getClassName().equals(Thread.class.getName())) {                continue;            }            if (st.getClassName().equals(this.getClass().getName())) {                continue;            }            return "["+Thread.currentThread().getName()+"("+Thread.currentThread().getId()+"): "+st.getFileName()+":"+st.getLineNumber()+"]";        }                return null;}public void info(Object str) {    if (logLevel <= Log.INFO) {                String name = getFunctionName();        String ls=(name==null?str.toString():(name+" - "+str));        Log.i(tag, ls);    }}public void i(Object str) {if (isDebug) {info(str);}}public void verbose(Object str) {        if (logLevel <= Log.VERBOSE) {            String name = getFunctionName();            String ls=(name==null?str.toString():(name+" - "+str));            Log.v(tag, ls);            }}public void v(Object str) {if (isDebug) {verbose(str);}    }public void warn(Object str) {    if (logLevel <= Log.WARN) {            String name = getFunctionName();            String ls=(name==null?str.toString():(name+" - "+str));            Log.w(tag, ls);    }}public void w(Object str) {if (isDebug) {warn(str);}    }public void error(Object str) {        if (logLevel <= Log.ERROR) {                        String name = getFunctionName();            String ls=(name==null?str.toString():(name+" - "+str));            Log.e(tag, ls);        }}public void error(Exception ex) {    if (logLevel <= Log.ERROR) {        StringBuffer sb = new StringBuffer();        String name = getFunctionName();        StackTraceElement[] sts = ex.getStackTrace();        if (name != null) {                sb.append(name+" - "+ex+"\r\n");            } else {                sb.append(ex+"\r\n");            }                if (sts != null && sts.length > 0) {            for (StackTraceElement st:sts) {                if (st != null) {                    sb.append("[ "+st.getFileName()+":"+st.getLineNumber()+" ]\r\n");                }            }        }                Log.e(tag, sb.toString());    }}    public void e(Object str) {    if (isDebug) {    error(str);    }    }    public void e(Exception ex) {    if (isDebug) {    error(ex);    }    }public void debug(Object str) {        if (logLevel <= Log.DEBUG) {            String name = getFunctionName();            String ls = (name == null?str.toString():(name+" - "+str));            Log.d(tag, ls);        }}public void d(Object str) {if (isDebug) {debug(str);}    }}


ACTIVITY里的调用:

public class DebugDemoActivity extends Activity implements OnClickListener{    /** Called when the activity is first created. */ private CommonLog mCommonLog = LogFactory.createLog();private Button mBtn1;private Button mBtn2;    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.main);                initView();                mCommonLog.e("onCreate...");            }@Overrideprotected void onStart() {// TODO Auto-generated method stubsuper.onStart(); mCommonLog.e("onStart...");}@Overrideprotected void onResume() {// TODO Auto-generated method stubsuper.onResume(); mCommonLog.e("onResume...");}@Overrideprotected void onPause() {// TODO Auto-generated method stubsuper.onPause(); mCommonLog.e("onPause...");}@Overrideprotected void onStop() {// TODO Auto-generated method stubsuper.onStop(); mCommonLog.e("onStop...");}        @Overrideprotected void onDestroy() {// TODO Auto-generated method stubsuper.onDestroy(); mCommonLog.e("onDestroy...");}public void  initView()    {    mBtn1 = (Button) findViewById(R.id.button1);    mBtn1.setOnClickListener(this);        mBtn2 = (Button) findViewById(R.id.button2);    mBtn2.setOnClickListener(this);    }@Overridepublic void onClick(View view) {// TODO Auto-generated method stubswitch(view.getId()){case R.id.button1:{ mCommonLog.e("R.id.button1onClick...");}break;case R.id.button2:{SubThread subThread = new SubThread();subThread.start();}break;default:break;}}}

最后看效果图:

下面附上工程链接:

http://download.csdn.net/detail/geniuseoe2012/4470104

欲了解更多androidlogcat的使用,请看这篇博文:

http://blog.csdn.net/geniuseoe2012/article/details/7820366

更多相关文章

  1. eBook 功能模块二之设置模块
  2. android NDK开发在本地C/C++源代码中设置断点单步调试详细教程
  3. Android好看的日期时间选择器,自定义的时钟组件
  4. 实现ListView的条目下自动隐藏显示Button的方法
  5. Android(安卓)webView中无法显示Twitter主页
  6. 在Android(安卓)studio 中配置高德地图api后显示地图遇到的问题
  7. Android(安卓)菜单开发自定义效果
  8. Android(安卓)Studio代码自己主动提示无效(not available in Powe
  9. android GridView设置边框教程。

随机推荐

  1. Android下uptime获取系统启动和运行时间
  2. Android流量统计
  3. android中context
  4. 创建SqliteDatabase
  5. USB Accessory
  6. 常用数组函数学习
  7. TP vue绑定事件与组件、通信、路由(四)
  8. WIN7实现安装node14版本
  9. 实例演示CURD
  10. 实例演示:模态框