Прослушиватели трассировки

При использовании классов Trace, Debug и TraceSource необходимо обеспечить механизм сбора и записи отправляемых сообщений. Сообщения трассировки получаются прослушивателями. В задачу прослушивателя входит сбор, хранение и маршрутизация сообщений трассировки. Прослушиватели направляют выходные данные трассировки соответствующему целевому объекту, например, в журнал событий, окно или текстовый файл.

Прослушиватели доступны для классов Debug, Trace и TraceSource, каждый из которых может отправлять свои выходные данные разным объектам прослушивателей. Ниже перечислены часто используемые предварительно определенные прослушиватели.

  • Прослушиватель TextWriterTraceListener перенаправляет выходные данные в экземпляр класса TextWriter или любой объект, являющийся классом Stream. Он также может осуществлять запись в консоль или файл, потому что это классы Stream.

  • Класс EventLogTraceListener перенаправляет выходные данные в журнал событий.

  • Класс DefaultTraceListener выводит сообщения методов Write и WriteLine в строку OutputDebugString и метод Debugger.Log. В Visual Studio в этом случае сообщения отладки отображаются в окне «Вывод». Сообщения метода Fail и завершившегося сбоем метода Assert также выводятся в API Windows OutputDebugString и методе Debugger.Log. Также в этом случае отображается поле сообщений. Данное поведение — это поведение по умолчанию для сообщений Debug и Trace, так как прослушиватель DefaultTraceListener автоматически включается в каждую коллекцию Listeners и является единственным автоматически включаемым прослушивателем.

  • Объект ConsoleTraceListener направляет выходные данные трассировки или отладки в стандартный вывод или стандартный поток ошибок.

  • Прослушиватель DelimitedListTraceListener направляет выходные данные трассировки или отладки в модуль записи текста, например модуль записи в поток, или в поток, например файловый поток. Выходные данные трассировки отображаются в текстовом формате с разделителями, заданном свойством Delimiter .

  • Прослушиватель XmlWriterTraceListener направляет вывод отладки или трассировки в качестве кодированных в XML данных в метод TextWriter или поток Stream, например FileStream.

Если нужно, чтобы какой-либо еще прослушиватель, помимо DefaultTraceListener, получал выходные данные Debug, Trace и TraceSource, необходимо добавить его в коллекцию Listeners. Дополнительные сведения см. в разделе Практическое руководство. Создание и инициализация прослушивателей трассировки и Практическое руководство. Использование TraceSource и фильтров с прослушивателями трассировки. Любой прослушиватель из коллекции Listeners получает те же сообщения от методов вывода трассировки. Предположим, например, что настроены два прослушивателя: TextWriterTraceListener и EventLogTraceListener. Каждый прослушиватель получает одно и то же сообщение. Прослушиватель TextWriterTraceListener направляет выходные данные в поток, а EventLogTraceListener направляет выходные данные в журнал событий.

В приведенном ниже примере показана отправка выходных данных в коллекцию прослушивателей.

' Use this example when debugging.  
Debug.WriteLine("Error in Widget 42")  
' Use this example when tracing.  
Trace.WriteLine("Error in Widget 42")  
// Use this example when debugging.  
System.Diagnostics.Debug.WriteLine("Error in Widget 42");  
// Use this example when tracing.  
System.Diagnostics.Trace.WriteLine("Error in Widget 42");  

При отладке и трассировке используется одна и та же коллекция прослушивателей, поэтому если добавить объект прослушивателя в коллекцию Debug.Listeners в приложении, он также будет добавлен и в коллекцию Trace.Listeners.

В следующем примере показано использование прослушивателя для отправки сведений трассировки на консоль.

Trace.Listeners.Clear()  
Trace.Listeners.Add(New TextWriterTraceListener(Console.Out))  
System.Diagnostics.Trace.Listeners.Clear();  
System.Diagnostics.Trace.Listeners.Add(  
   new System.Diagnostics.TextWriterTraceListener(Console.Out));  

Прослушиватели, определяемые разработчиками

Можно определить собственные прослушиватели путем наследования от базового класса TraceListener и переопределения его методов своими пользовательскими методами. Дополнительные сведения о создании прослушивателей, определяемых разработчиками, см. в описании TraceListener в справочнике по .NET Framework.

См. также