当我在一个函数里面的时候,有没有一种方法可以抓取函数名和文件名?我试着像这样到处添加日志文件,并且希望能够在某些函数中复制和粘贴我的日志文件代码行:
public class NewCorrGenerator
{
public void Start()
{
bool rc = true;
myLogFile.InfoToFileWithTime("NewCorrGenerator - Start", appContext);
etc.....
}
}
正如您所看到的,是否有一种方法可以获取字符串中的类名和函数名,并将其输出到myLogFile函数?
5条答案
按热度按时间zysjyyx41#
你可以使用GetCurrentMethod。这将返回一个
MethodBase
类型的对象。Name
属性获取方法的名称。DeclaringType
将给予你一个类。这与文件名不同,但是如果你每个文件使用一个类型,它应该是接近的。zy1mlcev2#
可以使用
System.Diagnostics.StackTrace
和System.Diagnostics.StackFrame
类检索有关当前执行代码的信息:n1bvdmb63#
我知道这是一个老问题,但需求仍然是相关的。因此,为了记录在案,使用新工具的简单方法-CallerMemberName和CallerFilePath。
kmynzznz4#
你需要的是一个拦截器。最流行的框架是PostSharp。它是一个商业产品,可以做你需要的一切。如果你想自己写,试试this article
mklgxw1f5#
你可以使用反射来获得你所需要的。下面是一种获得方法名的方法:Retrieving the calling method name from within a method
我会考虑做一些其他的事情-拦截或代码生成,硬编码类/方法名称。如果您最终使用StackTrace,那么用编译器调试指令包围日志代码可能是一个好主意。