Functions
To extend Jared's answer by avoiding code repetition and including parameters for arguments :
private static void LogEnterExit(bool isEnter = true, params object[] args) { StackTrace trace = new StackTrace(true); // need `true` for getting file and line info if (trace.FrameCount > 2) { string ns = trace.GetFrame(2).GetMethod().DeclaringType.Namespace; string typeName = trace.GetFrame(2).GetMethod().DeclaringType.Name; string args_string = args.Length == 0 ? "" : "\narguments: [" + args.Aggregate((current, next) => string.Format("{0},{1};", current, next))+"]"; Console.WriteLine("{0} {1}.{2}.{3}{4}", isEnter ? "Entering" : "Exiting", ns, typeName, trace.GetFrame(2).GetMethod().Name, args_string ); } } static void LogEnter(params object[] args) { LogEnterExit(true, args); } static void LogExit(params object[] args) { LogEnterExit(false, args); }
Using
static void DoSomething(string arg1) { LogEnter(arg1); Console.WriteLine("Executing DoSomething"); LogExit(); }
Exit
In the console, this will be the output if DoSomething were started with a "blah" like arg1
Entering Program.DoSomething arguments: [blah] Executing DoSomething Exiting Program.DoSomething
Kyle falconer
source share