Android应用如何巧妙合理的控制Log
来源:互联网 发布:惠众金融网络借贷 编辑:程序博客网 时间:2024/05/16 00:25
Log是开发人员调试很重要的检查点,所以呢,巧妙控制Log 是优秀码农必须掌握好的技能之一!
第一步:写过Util工具类,如下:
public class Utils { /** * 用来获取Application meta data(这个在AndroidManifest中设置) */ public static Object getApplicationMeta(String key) { Object applicationMeta = null; try { ApplicationInfo applicationInfo = getPackageInfo().getApplicationInfo(getPackageName(), PackageManager.GET_META_DATA); if(applicationInfo != null) { applicationMeta = applicationInfo.metaData.get(key); } } catch (NameNotFoundException e) { L.e("can not found the meta in the application attributes:"+key); } return applicationMeta; }}第二步:设置debug开关
public class AppConfigs {//设定一个debug开关,控制是否打印log private static boolean init = false; private static boolean mDebug = false; public static void loadConfig() { if(!init) { //load the debug switch Object debug = Utils.getApplicationMeta("debug"); if(debug!=null) { try { mDebug = (Boolean)debug; } catch (Exception e) { L.e("debug tag is error"); } } init = true; } } public static boolean isDebug() { if(!init) { loadConfig(); } return mDebug; }}
第三步:重写Log的打印方法,以及保存名称:如 log_20140228
public class L { private static final String TAG = Constants.APP_NAME; /** * log文件名字 */ public static final String filename= Constants.LOG_DIR + File.separator + "log";/** *根据Log不同等级 */ public static void v(String text) { if (AppConfigs.isDebug()) { Log.v(TAG, text); write(text, Log.VERBOSE); } } public static void d(String text) { if (AppConfigs.isDebug()) { Log.d(TAG, text); write(text, Log.DEBUG); } } public static void i(String text) { if (AppConfigs.isDebug()) { Log.i(TAG, text); write(text, Log.INFO); } } public static void w(String text) { if (AppConfigs.isDebug()) { Log.w(TAG, text); write(text, Log.WARN); } } public static void e(String text) { if (AppConfigs.isDebug()) { Log.e(TAG, text); write(text, Log.ERROR); } } public static void e(String text, Throwable throwable) { StackTraceElement[] elements = throwable.getStackTrace(); for (StackTraceElement e : elements) { e(e.toString()); } } /** * 将Log写到日志文件中 * @param text * @param level */ private static synchronized void write(String text, int level) { StringBuilder sb = new StringBuilder(); sb.append("[" + DateUtil.toTime(System.currentTimeMillis(), DateUtil.DATE_FORMATE_ALL) + "]"); switch (level) { case Log.VERBOSE: sb.append("[V]\t"); break; case Log.DEBUG: sb.append("[D]\t"); break; case Log.INFO: sb.append("[I]\t"); break; case Log.WARN: sb.append("[W]\t"); break; case Log.ERROR: sb.append("[E]\t"); break; }//可以任意的访问文件的任何地方 RandomAccessFile raf = null; try { String fileName =filename+ "_" + DateUtil.toTime(System.currentTimeMillis(), DateUtil.DATE_DEFAULT_FORMATE); File logFile = new File(fileName); if (!logFile.exists()) { Utils.initExternalDir(false); logFile.createNewFile(); } raf = new RandomAccessFile(fileName, "rw"); raf.seek(raf.length());//将文件记录指针定位到pos位置。 raf.writeBytes(sb.toString() + text + "\r\n"); } catch (IOException e) { e.printStackTrace(); } finally { if (raf != null) { try { raf.close(); } catch (IOException e) { } } } }}
最后:在AndroidManifest文件中设置meta data:
<application android:name="XXXApplication" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" >//控制是否打印Log <meta-data android:name="debug" android:value="true" /> </application>
写入文件效果 大概如下 有详细的时间,log等级,内容可以自己控制。
[2014-02-28 16:49:35][E] ### getItemViewType TYPE_ONE_IMAGE 3
[2014-02-28 16:49:35][E] ### position 3
[2014-02-28 16:49:35][E] ### getItemViewType TYPE_ONE_IMAGE 3
[2014-02-28 16:49:35][E] ### getItemViewType TYPE_ONE_IMAGE 3
[2014-02-28 16:49:35][E] ### getItemViewType TYPE_ADS 0
[2014-02-28 16:49:35][E] ### getItemViewType TYPE_ONE_IMAGE 1
[2014-02-28 16:49:35][E] ### getItemViewType TYPE_ONE_IMAGE 2
[2014-02-28 16:49:35][E] ### getItemViewType TYPE_ONE_IMAGE 3
[2014-02-28 16:49:36][I] network state:WIFI
[2014-02-28 16:49:36][I] network state:WIFI
[2014-02-28 16:49:38][I] network state:WIFI
- Android应用如何巧妙合理的控制Log
- android:layout_weight的巧妙应用
- [如何控制Log 2]android的logcat详细用法
- 如何合理的控制solr查询的命中的数量?
- android 应用对内存是如何限制的?我们应该如何合理使用内存?如何限制的?
- 抓取Android应用的log
- hash的巧妙应用
- 位的巧妙应用
- 应该如何合理的应用CSS整体布局声明
- android应用:如何控制闪光灯
- 巧妙控制Delphi 的窗体
- NYOJ 蛇形填数在于循环的合理巧妙
- 如何分析Android的Log
- 如何分析Android的Log
- 如何分析Android的Log
- 如何分析Android的Log
- android开发笔记之handler+Runnable的一个巧妙应用
- Androidの应用引导页SplashActivity的巧妙之处
- 恒大宣布续约里皮三年 推霸气海报欲造大时代
- Mozilla联手黑莓推进Web安全技术,推出开源测试平台Minion
- VLC播放RTP PS 流的方法
- 2014年web开发者应该学习的技术
- TCP详解
- Android应用如何巧妙合理的控制Log
- java 使用mysql 的 blob 存储 protobuf 数据 的读写操作核心代码
- 英语对开发者很重要
- Linux 指令篇:档案目录管理--mkdir
- Numbers.app的使用
- Jsp调用Spring中的Bean
- 黑马程序员_Java多线程
- 十亿月PV网站秘诀:Reddit自失败中总结的25条经验
- sqlserver getdate() 时间转化