Android系统已经为我们提供了非常优秀的日志输出类Log,那么为什么我们还要打造属于自己的日志输出呢?请大家考虑这个问题

下面我来讲解一下我对这个问题的理解

首先

系统的工具类有天然的不可修改性,不利于扩张。log是系统内部提供的类,用户不允许改到,所以没有办法 添加方法去扩张类的功能,开发一个项目 几乎每个类都有很多打印日志方法,根据经验几乎每个人都有这样的经历。那么问题来了。如果一个类里打印了10条log 如何去精确定位是哪一行代码执行的呢,这个是系统部提供的,但是可以通过自定义log输出方式输出具体代码位置。

其次

系统的日志类使用起来有一点点麻烦,每个日志有两个 参数类似这样Log.i(tag, str.toString());

第一个tag一般是为了标记这个日志的,程序开发过程中一般使用类名以方便查找和定位,不过这带来的是确实非常多的重复劳动,比如每个需要用log的类都需要一个类名的TAG,使用时候还需要引用,如果可以自动生成应该是更完美的解决方式 。因为log 太常用了,使用自定义自动生成tag 的方式可以大大提高效率。

以上仅为个人见解,如果有更多好的建议请留言探讨。下面会发布一个个人精简的log源码

package com.jumige.mobile.allinone.utils;import android.util.Log;
/*** 日志工具类* 使打印日志变得简单 自动识别调用日志函数的类名 方法名 与位置* 不需要繁琐的TAG * 可以方便的 设置debug模式 发布时候 可以直接修改debug为false 就不会输出日志了* @author mathschild**/
public class LogUtil {/**   * @Title:         @LogUtil.java * @Description:   日志输出类 * @author         Wang Shuhai* @email          mathschild@126.com* @date           @2014-9-20  @下午5:13:49* @version        V1.0   *//*** 关闭日志输出*/private static boolean OPEN_LOG = true;/*** 关闭DEBUG日志输出*/private static boolean DEBUG = true;/*** TAG 名称*/ private static String tag = "[app]";private String mClassName;private static LogUtil log;private static final String USER_NAME = "@user@";private LogUtil(String name) {mClassName = name;}/*** Get The Current Function Name* * @return Name*/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 mClassName + "[ " + Thread.currentThread().getName() + ": "+ st.getFileName() + ":" + st.getLineNumber() + " "+ st.getMethodName() + " ]";}return null;}public static void i(Object str) {print(Log.INFO, str);}public static void d(Object str) {print(Log.DEBUG, str);}public static void v(Object str) {print(Log.VERBOSE, str);}public static void w(Object str) {print(Log.WARN, str);}public static void e(Object str) {print(Log.ERROR, str);}/*** 用于区分不同接口数据 打印传入参数* @param index * @param str*/private static void print(int index, Object str) {if (!OPEN_LOG) {return;}if (log == null) {log = new LogUtil(USER_NAME);} String name = log.getFunctionName();if (name != null) {str = name + " - " + str;}//Close the debug log When DEBUG is false if(!DEBUG){if(index<=Log.DEBUG){return;}}switch (index) {case Log.VERBOSE:Log.v(tag, str.toString());break;case Log.DEBUG:Log.d(tag, str.toString());break;case Log.INFO:Log.i(tag, str.toString());break;case Log.WARN:Log.w(tag, str.toString());break;case Log.ERROR:Log.e(tag, str.toString());break;default:break;}}
}

开发经验总结(打造更优秀的日志输出工具类)相关推荐

  1. 10个优秀的日志分析工具

    在网络管理员的日常工作中,对日志文件的分析能够及时了解网络设备或应用的性能数据,以便及时发现问题并及时解决.分析日志文件的时候需要运用到日志分析工具,接下来就给大家分享10个优秀的日志分析工具: 1. ...

  2. 新手必需知道的10个优秀的日志分析工具

    在网络管理员的日常工作中,对日志文件的分析能够及时了解网络设备或应用的性能数据,以便及时发现问题并及时解决.分析日志文件的时候需要运用到日志分析工具,接下来就给大家分享10个优秀的日志分析工具: 1. ...

  3. 一个好用的日志管理工具类MyLogger

    日志的规范管理,在项目中不容忽视,应用上线后将调试日志关闭也是十分必要的,下面就是一个好用的日志管理工具类(点击下载): import java.util.Hashtable;import andro ...

  4. unity 如何获取到屏幕中间_Unity通用渲染管线Shader日志输出工具

    这是侑虎科技第700篇文章,感谢作者邹春毅供稿.欢迎转发分享,未经作者授权请勿转载.如果您有任何独到的见解或者发现也欢迎联系我们,一起探讨.(QQ群:793972859) 作者主页:https://w ...

  5. 在logback、log4j等日志输出工具中输出java异常调用堆栈

    使用logback.log2j输出java异常如果采用如下方式: try{...}catch (Exception e){logger.error("[lid:{}] [{}]<< ...

  6. 一个错误日志记录工具类

    package com.moxiu.downloader.util;/*** 当程序发生Uncaught异常的时候,有该类来接管程序,并记录错误日志* Created by ZGP on 2017/7 ...

  7. Qt5之 简单的日志记录工具类

    qt5 自己做的一个读写 sqlite3 的数据工具,能打开sqlite3格式的数据库文件 地址:https://blog.csdn.net/HK_5788/article/details/80963 ...

  8. Java分布式唯一ID生成方案——比UUID效率更高的生成id工具类

    package com.xinyartech.erp.core.util;import java.lang.management.ManagementFactory; import java.net. ...

  9. Mybatis指定日志输出实现

    10             Mybatis指定日志输出实现 在程序开发过程中,为了调试方便.了解程序的运行过程,进行必要的日志输出总是免不了的.对于使用Mybatis而言,我们常见的需求是希望可以在 ...

最新文章

  1. Apache+PHP+MySQL安装与配置
  2. 读《构建之法》第 8、9、10 章有感
  3. mysql 的 sql 执行计划详解
  4. pycharm新建python file没有默认头_Pycharm 设置默认头的图文教程
  5. python拆分excel的sheet为单文件_pandas处理excel一个sheet拆分为多个sheet
  6. Selenium Web 自动化 - 项目实战(三)
  7. Python 元组拆包
  8. IDEA报错 com.microsoft.sqlserver.jdbc.SQLServerException : 列名或所提供的数目与表定于不匹配
  9. CTF古典密码:移位密码
  10. IDM(PC端下载) -Chrome浏览器插件
  11. IIS搭建本地服务器,花生壳实现外网通过域名访问网站
  12. 计算机组成和导论,计算机科学导论五第章计算机组成
  13. 程序界的高手传奇(转)
  14. Pytorch——XLNet 预训练模型及命名实体识别
  15. CIIP是基于XAF开发的开源信息系统框架
  16. 交叉引用跳转不到后面_参考文献如何正确标注引用而不会变红?
  17. icoud邮箱无法连接服务器,适用于 iCloud 电子邮件客户端的邮件服务器设置
  18. MIPI-DSI/CSI协议介绍
  19. 什么是BSD开源协议
  20. 手机端-上传头像并裁剪

热门文章

  1. 我的Notepad++ 颜色配置主题
  2. 2021-10-16 使用coding进行持续集成Qt项目
  3. 消息推送服务器推pc,PC浏览器消息实时推送的解决方案 ——EPush推送平台
  4. BURNINTEST FOR LINUX CLI
  5. python常见加密方式总结踩坑小贴士
  6. linux配置浮动IP
  7. kafka 心跳和 reblance
  8. 新用友终端如何连接服务器,客户端软件安装好后如何配置连接服务器
  9. 基于Spring MVC + Spring + MyBatis的【图书信息管理系统(一)】
  10. 思科双核心交换机双出口防火墙配置案例