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

Discussion in 'Java' started by Lethal Possum, Mar 29, 2007.

  1. 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
     
    Lethal Possum, Mar 29, 2007
    #1
    1. Advertisements

  2. Lethal Possum

    Daniel Pitts Guest

    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.
     
    Daniel Pitts, Mar 29, 2007
    #2
    1. Advertisements

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 (here). After that, you can post your question and our members will help you out.