0

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

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

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

        etc.....
    }
}

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

4

4 回答 4

1

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

于 2012-08-29T20:09:12.350 回答
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;
于 2012-08-29T20:11:31.673 回答
0

你需要的是一个拦截器。最流行的框架是PostSharp。它是一种商业产品,可以满足您的一切需求。如果你想自己写,试试看这篇文章

于 2012-08-29T20:02:42.743 回答
0

你可以使用反射来获得你需要的东西。这是获取方法名称的一种方法:Retrieving the calling method name from within a method

不过,我会考虑做其他事情 - 拦截或生成硬编码类/方法名称的代码。如果您最终使用 StackTrace,用编译器调试指令包围日志记录代码可能是个好主意。

于 2012-08-29T20:20:11.237 回答