先上效果图
格式: domain/[类名:代码行数]-> [方法名]: [输出内容]
- domain: HiLogLabel 中配置的 domain参数,
直接上代码:
public class HLog {
private static final boolean logEnable = BuildConfig.DEBUG;
private static final String TAG = "";
public static void d(String msg) {
d(TAG, msg);
}
public static void d(String TAG, String msg) {
if (logEnable) {
HiLog.debug(hLogLabel(TAG), msg);
}
}
public static void e(String msg) {
e(TAG, msg);
}
public static void e(String TAG, String msg) {
if (logEnable) {
HiLog.error(hLogLabel(TAG), msg);
}
}
public static void i(String msg) {
i(TAG, msg);
}
public static void i(String TAG, String msg) {
if (logEnable) {
HiLog.info(hLogLabel(TAG), msg);
}
}
public static void w(String msg) {
w(TAG, msg);
}
public static void w(String TAG, String msg) {
if (logEnable) {
HiLog.warn(hLogLabel(TAG), msg);
}
}
private static HiLogLabel hLogLabel(String TAG) {
return new HiLogLabel(HiLog.LOG_APP, 0x00201, generateTempTag(TAG));
}
private static String generateTempTag(String tag) {
if (TextUtils.isEmpty(tag)) {
return getDefaultTag();
} else {
return getDefaultTag() + ", " + tag;
}
}
private static String getDefaultTag() {
StackTraceElement[] elements = new Throwable().getStackTrace();
StackTraceElement element = null;
for (int i = 2; i < elements.length; i++) { // 这里的 i 起始值可以写 0,主要是下面的if 判断,目的是为了获取调用 Log 的地方
if (elements[i].getClassName().equals(HLog.class.getName())) {
element = elements[i + 1];
}
}
if (element != null) {
return "(" + element.getFileName() + ":" + element.getLineNumber() + ")->" + element.getMethodName();
}
return "HLog";
}
}