【发布时间】:2016-02-23 17:06:33
【问题描述】:
我编写了自己的自定义跟踪侦听器,现在我使用 TraceSource 对象来调用我从基类 TraceListener 的虚拟方法覆盖的所有自定义方法,即 TraceData(..)、TraceEvent(..) 的各种重载和 TraceTransfer(..) 等。
在使用 TraceSource 对象记录跟踪时,我不会直接调用我的任何自定义方法(在我的自定义侦听器上),而是会获取 TraceSource 的一个实例并(在其上)调用 TraceSource 对象自己的方法,例如 TraceData (..),TraceEvent(..) 和 TraceInformation(..) 这些方法将在内部调用我的自定义方法。
现在问题是我需要找到跟踪消息或日志来自的类和方法的名称。我在整个互联网上搜索并在这里找到了一些东西 How to get the name of the current method from code
但它仍然没有给我足够的反馈来告诉我如何在生产环境中避免编译器优化(正如上面给出的链接曾经说过的那样,这些属性在堆栈跟踪中一直需要这些属性以避免方法 in-生产中的衬里和尾递归),但我不能放置诸如
之类的属性 [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");
}
}
【问题讨论】:
-
我可以请我知道,而不是投反对票,你为什么不能回复它,也让我知道你投反对票的原因是什么?
-
对那些无缘无故投反对票的人感到羞耻,或者这对他们来说这个问题太难了,他们所做的只是投反对票,而不是像 Hanselman 在他的博客。
-
不知道为什么它的反对票,这是一个非常有效的问题。
-
感谢 Girish 感激不尽。
标签: c# logging reflection trace