在C#中抓取函数和文件名

时间:2012-08-29 19:56:07

标签: c# asp.net .net

当我在函数内部时,有没有办法获取函数名和文件名?我正试图在这样的地方添加日志文件,并希望能够在某些功能中复制和粘贴我的日志文件代码行:

public class NewCorrGenerator
{
    public void Start()
    {
        bool rc = true;

        myLogFile.InfoToFileWithTime("NewCorrGenerator - Start", appContext);

        etc.....
    }
}

正如您所看到的那样,有没有办法在字符串中获取类名和函数名并将其输出到myLogFile函数?

4 个答案:

答案 0 :(得分:1)

您可以使用GetCurrentMethod。这将返回MethodBase类型的对象。 Name属性以获取方法的名称。 DeclaringType会给你上课。这与文件名不同,但如果每个文件使用一种类型,它应该关闭。

答案 1 :(得分:1)

您可以使用System.Diagnostics.StackTraceSystem.Diagnostics.StackFrame类来检索有关当前正在执行的代码的信息:

var trace = new StackTrace(true);
var frame = trace.GetFrame(0);  // current frame
var lineNumber = frame.GetFileLineNumber();
var method = frame.GetMethod().Name;
var className = frame.GetMethod().ReflectedType.Name;

答案 2 :(得分:0)

你需要的是一个拦截器。最流行的框架是PostSharp。它是一种商业产品,可以满足您的一切需求。如果您想自己编写,请尝试查看this article

答案 3 :(得分:0)

您可以使用反射来获得所需内容。以下是获取方法名称的方法:Retrieving the calling method name from within a method

我会考虑做其他事情 - 拦截或代码生成,硬编码类/方法名称。如果你最终使用StackTrace,最好用编译器调试指令包围日志代码。