需求:二方库被哪些应用调用?包括方法的调用栈、类的调用栈等
思路:获取StackTraceElement元素,可以通过Throwable, Error类等
Sample代码:
- class Sample01 {
- public static void demo01() {
- Throwable throwable = new Throwable("initial");
- StackTraceElement[] traceElements = throwable.getStackTrace();
- for (StackTraceElement traceElement : traceElements) {
- System.out.println(traceElement.getClassName() + ", " + traceElement.getLineNumber());
- }
- }
- }
- class Sample02 {
- private static Logger logger = LoggerFactory.getLogger(Sample02.class);
- public void demo02() {
- try {
- Sample01.demo01();
- } catch (Exception e) {
- logger.error("hello", e);
- }
- }
- }
补充:StackTraceElement数组的内容有顺序,属于栈结构。第0个元素表示自己,第1个元素表示第一个调用者,...。从1开始输出,则可以不用输出自己的调用。
测试:
- public static void main(String[] args) {
- new Sample02().demo02();
- }
测试结果:
- com.alibaba.Sample01, 83
- com.alibaba.Sample02, 96
- com.alibaba.Hello, 77