如何确定调用方法和类名?

我目前正在使用内置的TraceListener开发应用程序日志库。 这个库将在许多项目中使用,并且应该提供一个简单的界面,我只需要关心将什么内容写入日志文件,而不是如何。

通过使用reflection命名空间,我可以找出当前称为日志函数的应用程序(检索执行程序集名称),但我还想要调用日志记录函数的函数和类的名称。

假设我有:

public static void LogInfo(string vLogText) { Trace.WriteLine( MethodInfo.GetCurrentMethod().Name + this.GetType().ToString() + vLogText); } 

当我从另一个项目调用时(类:TestClass,方法:TestMethod)

 Tracer.LogInfo("log this!") 

我希望在日志中看到:

 TestClass, TestMethod, log this! 

但相反,我得到了

 TracerClass, LogInfo, log this! 

如何获取父方法和类名?

最新的C#和VS 2012附带了Caller Information (即CallerFilePathAttributeCallerLineNumberAttributeCallerMemberNameAttribute ),如果您只能使用它,它将为您提供帮助。

如果你不能,你必须参考其他答案。

尝试做这样的事情:

 var mth = new StackTrace().GetFrame(1).GetMethod(); var cls = mth.ReflectedType.Name; // where 1 illustrates how deep into the stack to reflect. 

C#5.0>中有更优雅的解决方案,但是如果您使用的是较旧的框架,以上内容将会有所帮助。

您可以使用Environment.StackTrace记录完整的堆栈跟踪,而不仅仅是调用方法。 如果要使用相同的日志记录结构来记录exception,这可能会有所帮助。

有关更多信息,请参阅此msdn页面 。