这种Logger能够打印出Log的类名,方法名,以及调用的行数。
写这个的人也真是对于Java的错误机制有一个全面的了解了。
关键只在于一个叫做StackTraceElement
的类
通过它就可以获得上述的类名、方法名和行数。
下面是几个关键方法:
1 2 3 4 5 6 7 8 9 10 11
| public static void d(String content) { if (!allowD) return; StackTraceElement caller = OtherUtils.getCallerStackTraceElement(); String tag = generateTag(caller);
if (customLogger != null) { customLogger.d(tag, content); } else { Log.d(tag, content); } }
|
1 2 3
| public static StackTraceElement getCallerStackTraceElement() { return Thread.currentThread().getStackTrace()[4]; }
|
1 2 3 4 5 6 7 8
| private static String generateTag(StackTraceElement caller) { String tag = "%s.%s(L:%d)"; String callerClazzName = caller.getClassName(); callerClazzName = callerClazzName.substring(callerClazzName.lastIndexOf(".") + 1); tag = String.format(tag, callerClazzName, caller.getMethodName(), caller.getLineNumber()); tag = TextUtils.isEmpty(customTagPrefix) ? tag : customTagPrefix + ":" + tag; return tag; }
|