4

I'm writing a logging class in C# and would like to add the method from which the log call was made. Doing this manually isn't too attractive. Is there a way to know which method the currently executing code is in?

Thanks in advance for your awesomeness...

Gregg

EDIT: Using MethodBase...

 System.Reflection.MethodBase thisMethod = System.Reflection.MethodBase.GetCurrentMethod();
 Console.WriteLine("This method is: " + thisMethod.Name);

2 Answers 2

13

Use MethodBase.GetCurrentMethod:

Returns a MethodBase object representing the currently executing method.

The MethodBase type has a Name property that is the name of the currently executing method as a string.

As a side note, perhaps you should look into existing logging frameworks so that you don't have to reinvent the wheel.

Sign up to request clarification or add additional context in comments.

1 Comment

Watch out for the expense of repeated calls to this reflection method, cache the calls if at all possible (such as for enter/exit logging).
4

I would advise against doing this.

  • A logging method should generally have the minimum possible overhead, so that you can call it from performance-sensitive code.

  • Inlining means that you may not get the correct method, especially in release builds.

  • When logging exceptions, you will have the stack trace as part of the exception, which will give you the call stack at the moment the exception was thrown. When logging normal flow, it's much less useful to know the method name.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.