如何确定调用方法和类的名称? [重复](How to determine calling met

2019-07-19 19:16发布

这个问题已经在这里有一个答案:

  • 我怎么能找到调用当前方法的方法? 19个回答

我目前正在开发使用内置的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!

如何获得父类的方法和类的名称?

Answer 1:

最新的C#和VS 2012附带的来电信息 (即CallerFilePathAttributeCallerLineNumberAttributeCallerMemberNameAttribute ),这将帮助你,如果你只能用它。

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



Answer 2:

试着做这样的事情:

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>更优雅的解决方案,但如果你正在使用旧的框架,上面会有所帮助。



Answer 3:

你可能只是记录完整的堆栈跟踪,而不是仅仅使用调用方法Environment.StackTrace 。 如果你想使用相同的日志结构记录异常,这可能帮助你。

请参阅此MSDN页面获取更多信息。



文章来源: How to determine calling method and class name? [duplicate]