前言
-
目的
此代码块目的为了能在调试debug模式下能够准确的定位到log打印位置方便进行数据的调试
相关代码
/**
* log 日志
*/
public class LogUtils {
private static String className;//文件名A.java
private static String methodName;//方法名 getView
private static int lineNumber;//行数
/**
* 判断是否可以调试
*
* @return true代表debug模式
*/
private static boolean isDebuggable() {
return BuildConfig.DEBUG;
}
/**
* 创建log信息内容
*
* @param log 打印的log信息
* @return 带有定位的line所有log的信息
*/
private static String createLog(String log) {
StringBuffer buffer = new StringBuffer();
buffer.append("========log开始========");
buffer.append(methodName);
buffer.append("(").append(className).append(":").append(lineNumber).append(")================:\n");
buffer.append(log);
buffer.append("\n========log结束========");
return buffer.toString();
}
/**
* 获取文件名、方法名、所在行数
*
* @param sElements 栈内元素
*/
private static void getMethodNames(StackTraceElement[] sElements) {
className = sElements[1].getFileName();
// tag = sElements[1].getClassName(); // 包名类名:自选可用于Tag使用
methodName = sElements[1].getMethodName();
lineNumber = sElements[1].getLineNumber();
}
// 举例两个常用log,其他的直接造轮子就行了
public static void logi(String msg) {
if (!isDebuggable())
return;
getMethodNames(new Throwable().getStackTrace());
Log.i(className, createLog(msg));
}
public static void loge(String msg) {
if (!isDebuggable())
return;
getMethodNames(new Throwable().getStackTrace());
Log.e(className, createLog(msg));
}
}
打印结果
日志等级/Tag(带后缀的文件名称(即打印log位置的的文件)):=====方法名(文件以及位置信息:行数)=====: 输出具体内容 =====
// 具体事例:
E/ContentFragment.java: ========log开始========onCreateView(ContentFragment.java:1024)================:
我是需要打印的内容
========log结束========
PS
项目运行后打印日志后如更改代码需重新运行项目到机器中否者行数的定位将会失效
感兴趣的留下你的足迹,证明岁月曾来过
打扰了