打印函数调用栈
fun logStack(text: CharSequence?) {
Log.e("Debug", text, Throwable(text))
}
fun logStack(text: CharSequence?) {
Log.e("Debug", Log.getStackTraceString(Throwable("$text")))
}
手动拼接这个格式的log 也可以打印调用栈定位代码位置
val stacktrace = Thread.currentThread().stackTrace
Log.e("Debug", "(" + stackTrace[2].fileName + ":" + stackTrace[2].lineNumber + ")")
Log.e("Debug", "(" + stackTrace[3].fileName + ":" + stackTrace[3].lineNumber + ")")
Log.e("Debug", "(" + stackTrace[4].fileName + ":" + stackTrace[4].lineNumber + ")")
另外还可以借用第三方库打印函数调用栈,例如
Logger2
初始化时传入的 methodCount
结合 methodOffset
FormatStrategy formatStrategy = PrettyFormatStrategy.newBuilder()
// .showThreadInfo(false) //(可选)是否显示线程信息。 默认值为true
.methodCount(3) //(可选)要显示的方法行数。 默认2
// .methodOffset(7) //(可选)隐藏内部方法调用到偏移量。 默认5
// .logStrategy(customLog) //(可选)更改要打印的日志策略。 默认LogCat
.tag(Constants.ACADSOC_LOG) //(可选)每个日志的全局标记。 默认PRETTY_LOGGER
.build();
Logger.addLogAdapter(new AndroidLogAdapter(formatStrategy) {
@Override
public boolean isLoggable(int priority, String tag) {
return AppUtils.isAppDebug();//release版本不打印
}
});