tags:

views:

121

answers:

2

Hi!

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);
+12  A: 

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.

Andrew Hare
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).
GrayWizardx
Thanks to you both!
Gregg Cleland
+4  A: 

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.

Joe
Thanks for adding that!
Gregg Cleland