如何确定调用方法和类名? [英] How to determine calling method and class name?

查看:25
本文介绍了如何确定调用方法和类名?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆