了解跟踪监听器

understanding Trace listeners

我最近刚刚发现了 Tracing 的强大功能(不知道为什么花了这么长时间)。理论和实践对我来说并不陌生,只是 .Net 中可用于这样做的资源。传统上,我只会记录我需要调查的程序部分,直到我得到任何问题或困惑的答案。最近这个任务没有给我足够的信息,而且太乏味了,因为我的应用程序现在太大了。大部分内容都没有很多明确的资源,所以我有几个问题:

  1. 如果我将自己的跟踪侦听器源添加到 trace.listeners 集合中,该跟踪侦听器是否会在启用跟踪时接收到可以在 trace.axd 页面中看到的跟踪信息在我的应用程序的 web.config?

  2. 如果是这样,我将如何着手创建可以接收该输入的所述侦听器?我已经创建了自己的 class 来实现跟踪侦听器 class 并且除了我自己的输入之外我似乎无法记录任何其他输入?我是不是误会了什么?

如果有另一种方法可以逐行记录我的应用程序而不必放置我自己的日志记录,那将非常有帮助。谢谢。

If I add my own trace listener source to the trace.listeners collection will that trace listener receive the trace information that can be seen in the trace.axd page when tracing is enabled in the web.config of my application?

您将能够看到写入 Trace 的任何内容。写入 trace.axd 的跟踪与普通的 TraceSource、TraceListener 等有点不同。最大的区别是它使用 Trace 对象,这是 .NET 1.1 进行跟踪的方式。在 .NET 2.0 及更高版本中,引入了命名的 TraceSources。

如果您在 Web 配置中注册了 TraceSwitch、TraceSource 和 TraceListener,则可以启用侦听您知道其名称的任何 TraceSource,例如 WCF 库。

其他地方记录 TraceSource 和 TraceListener 并比我更好地切换,例如http://blog.stephencleary.com/2010/12/simple-and-easy-tracing-in-net.html or https://msdn.microsoft.com/en-us/library/ms228984(v=vs.110).aspx

If so how would I go about creating said listener that can receive that input? I've created my own class that implements the trace listener class and I can't seem to get any other input to be logged other than my own?

您可以从继承 ConsoleLogListener 或 TextWriterTraceListener 开始。这个库有很多工具可以处理 System.Diagnostics Trace 的粗糙边缘。 https://essentialdiagnostics.codeplex.com/

(因为内置库有一些毛边,希望看到一些人告诉你使用其他日志库,有很多,但只有 System.Diagnostics 是内置的并且总是可用的)

If there is another way to log my application line by line without having to place my own logging, that would be very very helpful.

这需要 "code weaving" 或面向方面的编程,您可以在其中使用工具重新编译您的应用程序,并在任何地方或找到某个属性的地方添加诸如日志记录或跟踪之类的东西。 PostSharp 就是这样一种应用程序。内存配置文件可以为您提供逐行跟踪,作为向您显示应用程序花费大部分时间的副产品。