JAVA中获取调用栈帧的最优方式
前言 近期在做日志优化,需要记录业务日志,日志内容包括业务的请求、响应信息。当然还应该有具体的调用方法位置、日志的所在的方法等通用信息。 解决方案 一般情况下,在程序有异常信息时可以打印出整个调用堆栈信息,但是现在需要的是正常调用下来获取到当前方法的调用帧。 JAVA9之前 Thread.dumpStack() 这个可以打印出当前的堆栈错误信息,本质上是new一个Exception,调用了printStackTrace()方法,但是这个方法只建议用于调试。 public class StackTraceExample1 { public static void main(String[] args) { one(); } public static void one() { two(); } private static void two() { three(); } private static void three() { Thread.dumpStack(); } } 执行后输出如下: java.lang.Exception: Stack trace at java.base/java.lang.Thread.dumpStack(Thread.java:1379) at cn.imcompany.stack.StackTraceExample1.three(StackTraceExample1.java:25) at cn.imcompany.stack.StackTraceExample1.two(StackTraceExample1.java:21) at cn.imcompany.stack.StackTraceExample1.one(StackTraceExample1.java:17) at cn.imcompany.stack.StackTraceExample1.main(StackTraceExample1.java:13) 直接以异常的方式显示出来了。 ...