Log日志打印工具类
转载需注明出处http://blog.csdn.net/fight_0513/article/details/77098225
概述
- android的日志信息打印为我们开发过程中提供了许多帮助,不过系统的log还不够完美,例如不能快速定位代码位置,每次都要考虑设置怎样的Tag,还不美观,超长字符串打印不全(log单条打印长度限制4*1024字符长度),不能一眼就找到自己打印的信息……
- 网上已经有许多优秀的LOG框架 但是个人觉得有些臃肿,所以想自己动手写个方便的Log工具
个人需求
- 能定位(点击日志跳转到具体代码位置)
- 自动的日志打印开关(发布release版本时自动关闭日志打印)
- 美观(带边宽,可控制)
- 可以打印JSon数据,保证信息完整
- 不需要手动设置TAG
- 支持传入Objec
- 在手动设置TAG的情况下支持输入多个参数
- 提供线程信息
不支持打印到文件,不支持打印XML
执行效果
功能提要 >>代码定位
日志工具类的技术含量还是比较低的值得一提的只有快速定位代码位置的功能,这里涉及一个 StackTraceElement 类 就是堆栈信息;通过这个类可以获取当前堆栈信息,例如当前运行的线程,文件名,方法名,类名和代码所在行数……
//获取堆栈信息
// 这里的数组的index=5是根据你工具类的层级做不同的定义,遍历之后就知道啦
StackTraceElement[] targetElement = Thread.currentThread().getStackTrace();
String fileName = targetElement[5].getFileName();
String className = targetElement[5].getClassName();
int lineNum = targetElement[5].getLineNumber();
String methName = targetElement[5].getMethodName();
Log.e("TAG", "processContents: >>>" + fileName);
Log.e("TAG", "processContents: >>>" + className);
Log.e("TAG", "processContents: >>>" + methName);
Log.e("TAG", "processContents: >>>" + lineNum);
//严格按(FileName:LineNuber)的格式来写 才可以定位
Log.e("TAG", "processContents: >>>" + "(" + fileName + ":" + lineNum + ")");
打印结果
注意
调用 BuildConfig 导包时一定要导入 当前 Module 的包,导入其他包 BuildConfig.DEBUG的值将会一直为false
原因:BuildConfig.java 是编译时自动生成的,并且每个 Module 都会生成一份,以该 Module 的 packageName 为 BuildConfig.java 的 packageName。所以如果你的应用有多个 Module或者有其他三方依赖 就会有多个 BuildConfig.java 生成,而上面的 Lib Module import 的是自己的 BuildConfig.java,编译时被依赖的 Module 默认会提供 Release 版给其他 Module 或工程使用,这就导致该 BuildConfig.DEBUG 会始终为 false。
完整代码 >>代码下载
代码注释比较详细 如有疑问欢迎留言
public final class mLogUtils {
private mLogUtils