当我在函数内部时,有没有办法获取函数名和文件名?我正试图在这样的地方添加日志文件,并希望能够在某些功能中复制和粘贴我的日志文件代码行:
public class NewCorrGenerator
{
public void Start()
{
bool rc = true;
myLogFile.InfoToFileWithTime("NewCorrGenerator - Start", appContext);
etc.....
}
}
正如您所看到的那样,有没有办法在字符串中获取类名和函数名并将其输出到myLogFile函数?
答案 0 :(得分:1)
您可以使用GetCurrentMethod。这将返回MethodBase
类型的对象。 Name
属性以获取方法的名称。 DeclaringType
会给你上课。这与文件名不同,但如果每个文件使用一种类型,它应该关闭。
答案 1 :(得分:1)
您可以使用System.Diagnostics.StackTrace
和System.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,最好用编译器调试指令包围日志代码。