如何获取从.net中发送跟踪日志的方法和类的名称
我编写了自己的自定义跟踪侦听器,现在我使用TraceSource对象来调用我从基类TraceListener的虚拟方法重写的所有自定义方法,即TraceData(..),TraceEvent(..)和TraceTransfer ..)等
使用TraceSource对象记录跟踪时,我不会直接调用任何自定义方法(在我的自定义侦听器上),而是抓取TraceSource的实例并调用TraceSource对象的自己的方法,如TraceData(.. ),TraceEvent(..)和TraceInformation(..),这些方法将在内部调用我的自定义方法。
现在的问题是我需要找到跟踪消息或日志来自的类和方法的名称。 我在互联网上搜索,发现了一些在这里如何从代码中获取当前方法的名称
但是它仍然没有给我足够的反馈,因为我将如何避免在生产环境中进行编译器优化(正如上面给出的链接所指出的那样,这些属性在堆栈跟踪中一直需要,以避免内部方法和尾部生产中的递归),但我不能把属性如
[MethodImpl(MethodImplOptions.NoInlining)]
对TraceSource类的方法(因为它们已经超出了我无法控制的框内功能),尽管我可以对我的自定义方法执行相同的操作,但只是这样做不能解决我的问题。 话虽如此,我面临的另一个问题(属性问题分开)。 我如何发送类的名称(在我的情况下XYZ类)和方法(MyMethod)我的自定义跟踪监听器方法(因为MyMethod不直接调用我的自定义方法只有TraceSource的TraceData(...)在内部调用一个)我的自定义方法中捕获此信息,然后做任何我想要做的信息。
public class XYZ
{
static readonly TraceSource source = new TraceSource("somesource");
public void MyMethod()
{
source.TraceData(eventType.Error,1, "This is an error message");
}
}
我认为这里最好的方法是使用代码注入技术来注入跟踪方法调用来获取方法的详细信息并记录它。 我在这里的一篇文章中解释了这种方法:http://www.codeproject.com/Articles/445858/Tracing-with-Code-Injection
想法是不尝试在运行时调用方法信息,而是在方法体的开始处注入代码以调用TraceSource上的日志方法并传递方法详细信息。 希望有所帮助。
链接地址: http://www.djcxy.com/p/52399.html上一篇: How to get name of method and class from where trace logs are sent in .net