假设我有这样的方法
Calculator calc;
public void testMethod(){
-----
----
Calc.add(1,2);
-----
-------
}
现在我想在函数末尾打印 Calculator.add,即我想在函数末尾打印 classname.printname。打印应该足够通用,我也可以将其用于其他方法。如何实现这个目标。
提前致谢
假设我有这样的方法
Calculator calc;
public void testMethod(){
-----
----
Calc.add(1,2);
-----
-------
}
现在我想在函数末尾打印 Calculator.add,即我想在函数末尾打印 classname.printname。打印应该足够通用,我也可以将其用于其他方法。如何实现这个目标。
提前致谢
private static final int CLIENT_CODE_STACK_INDEX;
static {
// Finds out the index of "this code" in the returned stack trace - funny but it differs in JDK 1.5 and 1.6
int i = 0;
for (StackTraceElement ste : Thread.currentThread().getStackTrace()) {
i++;
if (ste.getClassName().equals(Resource.class.getName())) {
break;
}
}
CLIENT_CODE_STACK_INDEX = i;
}
public static String getCurrentMethodName() {
return Thread.currentThread().getStackTrace()[CLIENT_CODE_STACK_INDEX].getMethodName();
}
public static String getCallerMethodName() {
return Thread.currentThread().getStackTrace()[CLIENT_CODE_STACK_INDEX+1].getMethodName();
}
作为最简单的方法,请记住您始终可以调用this.getClass().getName()
:
class SimpleCalculator {
public int add(int a, int b) {
System.out.println(this.getClass().getName() +
" - adding " + a + " and " + b);
return a + b;
}
}
另一种常见的方法是使用Log4J 之类的日志库。
您将使用的类是Logger
您将Log4J配置为写入某个文件。
每个类都声明了一个将消息打印到文件的Logger 对象。
每条消息都以生成消息的类的名称开头。
class SimpleCalculator {
Logger calcLogger = Logger.getLogger(SimpleCalculator.class);
public int add(int a, int b) {
calcLogger.debug("add - adding " + a + " and " + b);
return a + b;
}
}
...或者您可以使用@urir 建议的方法。
...或者您可能会发疯并使用AOP。
user Calculator.getClass().getName());用于查找类名和Calculator.getMethod();
或者使用 System.out.println("我被调用了 " + e.getStackTrace()[1].getClassName() + "." + e.getStackTrace()[1].getMethodName() + "()!" );