Finding calling method using reflection

There's probably a more elegant way to do this, but I wanted to find out which method had called the current method for logging. For example, I am calling a method in my DAO and i want to know which method from my Service layer called it...the Stack trace caught during an exception cuts me off and I could only find snippets of getting the current method name for logging purposes.

So, here's a method I drummed up to get the name of the calling-calling method:

///

/// Helper method for getting the name of the method that got us here

///

///

///

private string GetPreviousMethodName(MethodBase currentMethod)

{

string methodName = string.Empty;

try

{

StackTrace sTrace = new System.Diagnostics.StackTrace(true);

//loop through all the stack frames

for (Int32 frameCount = 0; frameCount < sTrace.FrameCount; frameCount++)

{

StackFrame sFrame = sTrace.GetFrame(frameCount);

System.Reflection.MethodBase thisMethod = sFrame.GetMethod();

//If the Type in the frame is the type that is being searched

if (thisMethod == currentMethod)

{

if (frameCount + 1 <= sTrace.FrameCount)

{

StackFrame prevFrame = sTrace.GetFrame(frameCount + 1);

System.Reflection.MethodBase prevMethod = prevFrame.GetMethod();

methodName = prevMethod.ReflectedType + "." + prevMethod.Name;

//get the method and its parameter info

//then exit out of the for loop

}

break;

}

}

}

catch (Exception)

{

//swallow all exceptions this may encounter...this is informational and mroe for convenience anyways

return string.Empty;

}

return methodName;

}

This article is part of the GWB Archives. Original Author: Mike Nichols

New on Geeks with Blogs

  • We Won The One Award I Actually Care About

    Full Scale made the Inc. 5000 for the fifth year straight, the 12th listing across my three companies. Here is why the one award you cannot buy is worth stopping for.

  • Your Customers Build the Features Now

    I let a tool I liked sit dead for a year rather than build the features I wanted. An MCP server meant I never had to, and your customers can do the same to your product.

  • Get the Size of a Directory in Linux the Easy Way

    du -sh for the quick answer, ncdu for the cleanup, df for the disk itself: every command for checking directory size in Linux, plus why du and df never agree.

  • Vim Search and Replace: The Ultimate Guide

    One :%s command replaces every match in a file before a find dialog would even open. The Vim substitute patterns worth the muscle memory: flags, ranges, capture groups, and multi-file edits.