超高逼格Log日志打印

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

超⾼逼格Log⽇志打印
前⾔
Log⽇志的打印⼀直是⼀个⽐较头疼的事,怎样才能让⾃⼰的log显⽰更多信息,怎样才能让⾃⼰的log更好的帮助我们定位问题,帮助调试,⼀直是我关注的问题。

我将Log打印封装到LogUtil类中,这篇⽂章涉及以下内容
1. LogUtil的优势
2. LogUtil的实现原理
3. LogUtil的使⽤
4. 项⽬结构图和效果图
⼀. LogUtil的优势
LogUtil打印封装类,其有以下优点:
1. 显⽰当前项⽬的包名
2. 显⽰当前⽇志级别
3. 显⽰tag
4. 显⽰log所在类的类名
5. 显⽰log调⽤处所在的⽅法名
6. 显⽰log所在的⾏数
7. 点击⾏数定位到具体代码处
⼆. LogUtil的实现原理
LogUtil能显⽰这么多信息,全在于StackTraceElement的功劳,StackTraceElement表⽰StackTrace(堆栈轨迹)中的⼀个元素,属性包括⽅法调⽤者的类名、⽅法名、⽂件名以及调⽤的⾏数,它是⼀个final类
它在LogUtil中会做类似如下功能的处理:
StackTraceElement elements[] = Thread.currentThread().getStackTrace();
for (int i = 0; i < elements.length; i++) {
StackTraceElement stackTraceElement = elements[i];
String className = stackTraceElement.getClassName();
String methodName = stackTraceElement.getMethodName();
String fileName = stackTraceElement.getFileName();
int lineNumber = stackTraceElement.getLineNumber();
System.out.println("StackTraceElement数组下标 i=" + i + "----------fileName="
+ fileName + "----------className=" + className + "----------methodName=" + methodName + "----------lineNumber=" + lineNumber);
}
在android中最原始的log打印,我们会类似这么⽤:
Log.i(String tag,String msg);
为了让log能更规范,显⽰更多信息,于是我将 tag ⽤⽅法formatLog(String tag)进⾏格式化处理,
formatLog 代码如下:
private static String formatLog(String tag) {
StackTraceElement traceElements[] = Thread.currentThread().getStackTrace();
StackTraceElement element = traceElements[4];
String className = element.getClassName();
String methodName = element.getMethodName();
String fileName = element.getFileName();
int lineNumber = element.getLineNumber();
if(className!=null&&className.contains(".")){
className=className.substring(stIndexOf(".")+1,className.length());
}
StringBuffer buffer = new StringBuffer();
buffer.append(tag + ":");
buffer.append(className + ".");
buffer.append(methodName + "(");
buffer.append(fileName + ":");
buffer.append(lineNumber + ")");
return buffer.toString();
}
为了防⽌log中的msg过长显⽰不全,LogUtil对传统的log中的msg做如下处理:
private static void printLog(String tag, String msg, String type) {
int count = msg.length();
if (count > 4000) {
for (int i = 0; i < count; i += 4000) {
if (i + 4000 < count) {
printByLogType(tag, msg.substring(i, i + 4000), type);
} else {
printByLogType(tag, msg.substring(i, msg.length()), type);
}
}
} else {
printByLogType(tag, msg, type);
}
}
这样就实现了LogUtil的主要逻辑。

三. LogUtil的使⽤
3.1 快速打印log
快速打印log时,log的tag会固定为LogUtil中的TAG值,你可以这样调⽤:LogUtil.w("=====測試按鈕被點擊了====");
3.2 定义⾃⼰的tag⽇志
如果你想定义⼀个tag=”abc“的log⽅便⾃⼰调试,你可以这样:
LogUtil.w("abc","=====測試按鈕被點擊了====");
打印出的log类似下⾯这样:
⾥⾯包含包名,⽇志级别,tag,类名,⽅法名和log的⾏数
四. 项⽬结构图和效果图
项⽬结构截图
运⾏效果图
超⾼逼格Log⽇志打印
注:本⽂著作权归作者,由demo⼤师代发,拒绝转载,转载需要作者授权。

相关文档
最新文档