动态取得调用的类名,方法名,行数

原创 2005年05月31日 09:58:00

主要是通过StackTraceElement 去获得运行栈的信息。

 public static void getCaller() {
  int i;
  StackTraceElement stack[] = (new Throwable()).getStackTrace();
  for (i = 0; i < stack.length; i++) {
   StackTraceElement ste = stack[i];
   System.out.println(ste.getClassName() + "." + ste.getMethodName()
     + "(...)");
   System.out.println(i + "--" + ste.getMethodName());
   System.out.println(i + "--" + ste.getFileName());
   System.out.println(i + "--" + ste.getLineNumber());

//如果只是单纯的要取得类名,也可以用

/**

sun.reflect.Reflection().getCallerClass( int p0);

其中 当p0 = 0 时,表示sun.reflect.Reflection
当p0=1 表示 类本省
当p0=2 表示 调人者

。。。

*/
  }
 }

以一个经常使用的例子log信息的输出为例:

先建立一个接口:

public interface Loggable {
 StackTraceElement stack[] = (new Throwable()).getStackTrace();
 StackTraceElement ste = stack[1];
 public static Logger log = Logger.getLogger("Class:"+ste.getClassName() + "___Method:"
   + ste.getMethodName()+"  :"+ste.getLineNumber());
}

然后需要进行log输出的类实现这个接口,直接调用log.xxx就行了

public class TestLog implements Loggable {

 public static void main(String[] args) {
  log.info("test");
 }
}

以上信息参考自“java视线”论坛。更详细的内容可以参看

http://forum.javaeye.com/viewtopic.php?p=79342#79342

logback配置显示类名、方法名和代码行号

概述 logback日志配置了输出格式,但是日志输出中为“?.?(?)”,这位调试问题造成了很大的影响。 配置 光有以下配置,还不行, 还需要添加“AsyncAppender”。AsyncApp...
  • heymysweetheart
  • heymysweetheart
  • 2017年03月07日 15:01
  • 4514

logback--配置(显示类名、方法名、代码行号问题)

logback日志配置了输出格式,但是日志输出中为“?.?(?)”,这位调试问题造成了很大的影响。...
  • qq853632587
  • qq853632587
  • 2017年10月13日 10:15
  • 609

Android显示Log信息(带行号,类名,方法名)

package com.dylan.testlog; import android.util.Log; public class MyLogger { // private static fina...
  • u010785585
  • u010785585
  • 2014年07月16日 16:42
  • 2250

java中类名+方法名(){}什么意思?

class Doga{int age;float height;public Doga(){age=1;height=10; }//这句啥意思啊,怎么grow方法由类Doga 去修饰呢?表示何意? p...
  • lqxandroid2012
  • lqxandroid2012
  • 2015年09月02日 12:02
  • 3400

Java如何根据类名和方法名创建类的实例,并调用对应方法?

请看下面的代码: package interview; import java.lang.reflect.InvocationTargetException; import java.lang.re...
  • zwcwu31
  • zwcwu31
  • 2017年06月08日 12:32
  • 937

为log4j加上完整的调用者的函数、行号等调试信息

log4j是个必不可少的日志输出工具,在log4j.properties里面配置log4j.appender.RollingAppender.layout.ConversionPattern=%d{y...
  • rocklee
  • rocklee
  • 2016年07月26日 12:04
  • 1933

java 获得类名,方法名,行数

public static String getTraceInfo() { StringBuffer sb = new StringBuffer(); ...
  • gaoqinqing
  • gaoqinqing
  • 2011年12月27日 13:20
  • 1020

Android 代码里 用log打印 该行的类名、文件名、方法名、行号等信息

// Log.d("5555555555555", "信息"+Tools.getMyStackTraceInfo(new Exception())); // Log.d("5555555555555"...
  • w6028819321
  • w6028819321
  • 2013年12月12日 11:52
  • 2028

iOS通过宏定义设置NSLog打印出类名、方法名和NSLog所在行数以及PCH文件的使用

新建pch文件,在pch文件里添加以下代码,你也可以把DLog替换成自己喜欢的名字 添加如下代码后,使用DLog打印,会打印出DLog所在类的名字,所在方法的名字,所在行数.当然还有特别重要的一点是...
  • l2i2j2
  • l2i2j2
  • 2016年04月03日 22:34
  • 2734

在SpingMVC的Interceptor中如何得到被调用方法名

背景 为什么要在interceptor层获得方法名称呢?在分布式链路系统中我们需要在MVC框架层埋点,统计方法调用的耗时、trace信息等,目前公司内部没有统一的MVC框架,但是大多数都是使用的...
  • a837199685
  • a837199685
  • 2016年09月01日 00:57
  • 2677
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:动态取得调用的类名,方法名,行数
举报原因:
原因补充:

(最多只允许输入30个字)