如何确定调用方法和类名? [英] How to determine calling method and class name?
问题描述
我目前正在使用内置的 TraceListener 开发应用程序日志库.这个库将在许多项目中使用,应该提供一个简单的界面,我只需要关心将要写入日志文件的内容,而不是如何写入.
I'm currently developing a application logging library using the built in TraceListener. This library will be used in many projects and should offer a simple interface where I only have to care about WHAT is going to be written in into the log file, but not HOW.
通过使用反射命名空间,我可以找出当前调用日志函数的应用程序(检索执行程序集名称),但我还想要调用日志函数的函数和类的名称.
By using the reflection namespace, I can figure out which application currently called a log function (retrieving execution assembly name), but I want also the name of the function and class that called the logging function.
假设我有:
public static void LogInfo(string vLogText) {
Trace.WriteLine(
MethodInfo.GetCurrentMethod().Name
+ this.GetType().ToString() + vLogText);
}
当我从另一个项目调用时(类:TestClass,方法:TestMethod)
When I call from another project (class: TestClass, method: TestMethod)
Tracer.LogInfo("log this!")
我希望在日志中看到:
TestClass, TestMethod, log this!
但是我得到了
TracerClass, LogInfo, log this!
如何获取父方法和类名?
How to get the parent method and class name?
推荐答案
尝试这样做:
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 中有更优雅的解决方案>,但是如果您使用的是较旧的框架,以上内容会有所帮助.
There are more elegant solutions in C# 5.0 >, however if you are using older frameworks, the above will help.
这篇关于如何确定调用方法和类名?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!