需求:二方库被哪些应用调用?包括方法的调用栈、类的调用栈等

思路:获取StackTraceElement元素,可以通过Throwable, Error类等

Sample代码:

 
  
  1. class Sample01 { 
  2.     public static void demo01() { 
  3.         Throwable throwable = new Throwable("initial"); 
  4.         StackTraceElement[] traceElements = throwable.getStackTrace(); 
  5.         for (StackTraceElement traceElement : traceElements) { 
  6.             System.out.println(traceElement.getClassName() + ", " + traceElement.getLineNumber()); 
  7.         } 
  8.     } 
  9.  
  10. class Sample02 { 
  11.     private static Logger logger = LoggerFactory.getLogger(Sample02.class); 
  12.  
  13.     public void demo02() { 
  14.         try { 
  15.             Sample01.demo01(); 
  16.  
  17.         } catch (Exception e) { 
  18.             logger.error("hello", e); 
  19.         } 
  20.     } 

补充:StackTraceElement数组的内容有顺序,属于栈结构。第0个元素表示自己,第1个元素表示第一个调用者,...。从1开始输出,则可以不用输出自己的调用。

测试:

 
  
  1. public static void main(String[] args) { 
  2.        new Sample02().demo02(); 
  3.    } 

测试结果:

 
  
  1. com.alibaba.Sample01, 83 
  2. com.alibaba.Sample02, 96 
  3. com.alibaba.Hello, 77