How to get the signature of the method you are in?

L

Lethal Possum

Hello everyone,

I use the following code to do some benchmarking of my application:

public void go(String arg) {
if (TRACE) {
long start = System.currentTimeMillis();
try {
_impl.go(arg);
} finally {
long stop = System.currentTimeMillis();
Log.trace(_impl.getClass(), "go(String arg)", stop - start);
}
} else {
_impl.go(arg);
}
}

I was wondering what would be the most efficient way to generate the
"go(String arg)" message automatically. A solution would be to do
something like:

Throwable t = new Throwable();
StackTraceElement s = t.getStackTrace()[0];
String message = s.getMethodName();

But this strikes me as neither very elegant or efficient. And it
doesn't include the full method signature, only the method name. Maybe
someone have a better idea?

Thanks in advance for your suggestions,

Thomas
 
D

Daniel Pitts

Hello everyone,

I use the following code to do some benchmarking of my application:

public void go(String arg) {
if (TRACE) {
long start = System.currentTimeMillis();
try {
_impl.go(arg);
} finally {
long stop = System.currentTimeMillis();
Log.trace(_impl.getClass(), "go(String arg)", stop - start);
}
} else {
_impl.go(arg);
}

}

I was wondering what would be the most efficient way to generate the
"go(String arg)" message automatically. A solution would be to do
something like:

Throwable t = new Throwable();
StackTraceElement s = t.getStackTrace()[0];
String message = s.getMethodName();

But this strikes me as neither very elegant or efficient. And it
doesn't include the full method signature, only the method name. Maybe
someone have a better idea?

Thanks in advance for your suggestions,

Thomas

You can also look into creating a tracing Proxy class

look for java.lang.reflect.Proxy

It basically allows you to trap method calls. If TRACE doesn't
change, you could even make a factory the returns the _impl object if !
TRACE, and return the proxy if TRACE. That provides even better
performance.

Beyond that, you might even look into AspectJ or other Aspect Oriented
Programming (AOP) frameworks.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
474,001
Messages
2,570,249
Members
46,846
Latest member
BettinaOsw

Latest Threads

Top