使用StackTraceElement(堆栈轨迹)获取到类名,方法名,日志行数。
将日志方法参数设为可变参数,使用时免去来回拼接并且可接收任何参数。
使用时,直接用"{}"占位,后跟实参。
打印结果:

贴出整个工具类代码:
package com.zhuotop.logutils;
import android.util.Log;
import java.util.Locale;
public class LogUtils {
private static final String TAG = "Demo";
public static <T> void info(String msg, T... t) {
String content = msg.replaceAll("%%", "%");
String info = getTrackInfo() + content.replaceAll("\\{\\}", "%s");
Log.i(TAG, String.format(Locale.ROOT, info, t));
}
private static String getTrackInfo() {
StackTraceElement stackTrace = new Throwable().getStackTrace()[2];
String className = stackTrace.getClassName();
String simlpeName = className.substring(className.lastIndexOf(".") + 1);
String methodName = stackTrace.getMethodName();
int lineNumber = stackTrace.getLineNumber();
return String.format(Locale.ROOT, "[%s:%s %d]", simlpeName, methodName, lineNumber);
}
}
