如何确定调用方法和类名

本文关键字:方法 何确定 调用 | 更新日期: 2023-09-27 17:58:58

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

通过使用反射名称空间,我可以确定当前调用日志函数的应用程序(检索执行程序集名称),但我也需要调用日志函数和类的名称。

假设我有:

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!

如何获取父方法和类名?

如何确定调用方法和类名

尝试这样做:

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的调用方法。如果您想使用相同的日志记录结构来记录异常,这可能会对您有所帮助。

有关详细信息,请参阅此msdn页面。

相关文章: