Поделиться через


EventSchemaTraceListener Класс

Определение

Направляет результаты трассировки или отладки сквозных событий в совместимый со схемой файл журнала в XML-представлении.

public ref class EventSchemaTraceListener : System::Diagnostics::TextWriterTraceListener
public class EventSchemaTraceListener : System.Diagnostics.TextWriterTraceListener
type EventSchemaTraceListener = class
    inherit TextWriterTraceListener
Public Class EventSchemaTraceListener
Inherits TextWriterTraceListener
Наследование

Примеры

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


///////////////////////////////////////////////////////////////////////
//
// EventSchemaTraceListener.cpp : main project file.
// Expected Output:
// 1)
//      EventSchemaTraceListener CPP Sample
//
//      IsThreadSafe? True
//      BufferSize =  65536
//      MaximumFileSize =  20480000
//      MaximumNumberOfFiles =  2
//      Name =  eventListener
//      TraceLogRetentionOption = LimitedCircularFiles
//      TraceOutputOptions = DateTime, Timestamp, ProcessId
//
//      Press the enter key to exit
//
// 2) An output file is created named TraceOutput.xml.  It will be
//    opened and displayed in Microsoft Notepad.
//
// NOTE 1:
//  Under certain circumstances, the VS C++ compiler will treat
//          Console::WriteLine("MyText = " + MyVar);
//        differently then the VS CSharp compiler.
//        The C++ compiler will produce error C3063, whereas the 
//        CSharp compiler accepts the statement.
//        This occurs when the VS C++ compiler cannot determine the
//        datatype of "MyVar" because it is an enumeration type.
//        The solution is:
//        Use either of the following two methods:
//          Console::WriteLine("MyText = {0} " , MyVar);
//          Console::WriteLine("MyText =  " + MyVar.ToString());
//
//        Although not specific to this particular pieces of code,
//        this is demonstrated below in the Display function:  The
//        last two members, TraceLogRetentionOption, and
//        TraceOutputOptions, are enumerations, and cannot simply be
//        concatenated into Console::WriteLine.
//
///////////////////////////////////////////////////////////////////////
#using <System.dll>
#using <System.Core.dll>

#define NOCONFIGFILE 1
using namespace System;
using namespace System::IO;
using namespace System::Diagnostics;


[STAThreadAttribute]
void main()
{
    Console::WriteLine("EventSchemaTraceListener CPP Sample\n");

    File::Delete("TraceOutput.xml");
    TraceSource ^ ts = gcnew TraceSource("TestSource");


#if NOCONFIGFILE
    ts->Listeners->Add(gcnew EventSchemaTraceListener("TraceOutput.xml",
                            "eventListener", 65536,
                            TraceLogRetentionOption::LimitedCircularFiles,
                            20480000, 2));
    ts->Listeners["eventListener"]->TraceOutputOptions =
                                    TraceOptions::DateTime |
                                    TraceOptions::ProcessId |
                                    TraceOptions::Timestamp;
#endif

    EventSchemaTraceListener ^ ESTL =
               (EventSchemaTraceListener^)(ts->Listeners["eventListener"]);


    Console::WriteLine("IsThreadSafe?            = " + ESTL->IsThreadSafe);
    Console::WriteLine("BufferSize               = " + ESTL->BufferSize);
    Console::WriteLine("MaximumFileSize          = " + ESTL->MaximumFileSize);
    Console::WriteLine("MaximumNumberOfFiles     = " + ESTL->MaximumNumberOfFiles);
    Console::WriteLine("Name                     = " + ESTL->Name);
    Console::WriteLine("TraceLogRetentionOption  = " + ESTL->TraceLogRetentionOption.ToString());
    Console::WriteLine("TraceOutputOptions       = {0}\n", ESTL->TraceOutputOptions);

    ts->Switch->Level = SourceLevels::All;
    String ^ testString = "<Test><InnerElement Val=\"1\" />"
                        + "<InnerElement Val=\"Data\"/>"
                        + "<AnotherElement>11</AnotherElement></Test>";

    UnescapedXmlDiagnosticData ^ unXData = gcnew UnescapedXmlDiagnosticData(testString);
    ts->TraceData(TraceEventType::Error, 38, unXData);
    ts->TraceEvent(TraceEventType::Error, 38, testString);
    ts->Flush();
    ts->Close();

    Process::Start("notepad.exe", "TraceOutput.xml");
    Console::WriteLine("\nPress the enter key to exit");
    Console::ReadLine();
}
#define NOCONFIGFILE
using System;
using System.IO;
using System.Xml;
using System.Xml.XPath;
using System.Diagnostics;

class testClass
{
    [STAThreadAttribute]
    static void Main()
    {
        File.Delete("TraceOutput.xml");
        TraceSource ts = new TraceSource("TestSource");
#if NOCONFIGFILE
        //ts.Listeners.Add(new EventSchemaTraceListener("TraceOutput.xml", "eventListener", 65536, TraceLogRetentionOption.LimitedCircularFiles, 20480000, 2));
        ts.Listeners.Add(new EventSchemaTraceListener("TraceOutput.xml", "eventListener"));
        ts.Listeners["eventListener"].TraceOutputOptions = TraceOptions.DateTime | TraceOptions.ProcessId | TraceOptions.Timestamp;
#endif
        ts.Switch.Level = SourceLevels.All;
        string testString = "<Test><InnerElement Val=\"1\" /><InnerElement Val=\"Data\"/><AnotherElement>11</AnotherElement></Test>";
        UnescapedXmlDiagnosticData unXData = new UnescapedXmlDiagnosticData(testString);
        ts.TraceData(TraceEventType.Error, 38, unXData);
        ts.TraceEvent(TraceEventType.Error, 38, testString);
        Trace.Listeners.Add(new EventSchemaTraceListener("TraceOutput.xml"));
        Trace.Write("test", "test");
        Trace.Flush();
        ts.Flush();
        ts.Close();
        DisplayProperties(ts);
        Process.Start("notepad.exe", "TraceOutput.xml");
        Console.WriteLine("Press the enter key to exit");
        Console.ReadLine();
    }
    private static void DisplayProperties(TraceSource ts)
    {
        Console.WriteLine("IsThreadSafe? " + ((EventSchemaTraceListener)ts.Listeners["eventListener"]).IsThreadSafe);
        Console.WriteLine("BufferSize =  " + ((EventSchemaTraceListener)ts.Listeners["eventListener"]).BufferSize);
        Console.WriteLine("MaximumFileSize =  " + ((EventSchemaTraceListener)ts.Listeners["eventListener"]).MaximumFileSize);
        Console.WriteLine("MaximumNumberOfFiles =  " + ((EventSchemaTraceListener)ts.Listeners["eventListener"]).MaximumNumberOfFiles);
        Console.WriteLine("Name =  " + ((EventSchemaTraceListener)ts.Listeners["eventListener"]).Name);
        Console.WriteLine("TraceLogRetentionOption =  " + ((EventSchemaTraceListener)ts.Listeners["eventListener"]).TraceLogRetentionOption);
        Console.WriteLine("TraceOutputOptions =  " + ((EventSchemaTraceListener)ts.Listeners["eventListener"]).TraceOutputOptions);
    }
}
#Const NOCONFIGFILE = True
Imports System.IO
Imports System.Xml
Imports System.Xml.XPath
Imports System.Diagnostics

Class testClass

    <STAThreadAttribute()> _
    Shared Sub Main()
        File.Delete("TraceOutput.xml")
        Dim ts As New TraceSource("TestSource")
#If NOCONFIGFILE Then
        ts.Listeners.Add(New EventSchemaTraceListener("TraceOutput.xml", "eventListener", 65536, TraceLogRetentionOption.LimitedCircularFiles, 20480000, 2))
        ts.Listeners("eventListener").TraceOutputOptions = TraceOptions.DateTime Or TraceOptions.ProcessId Or TraceOptions.Timestamp
#End If
        ts.Switch.Level = SourceLevels.All
        Dim testString As String = "<Test><InnerElement Val=""1"" /><InnerElement Val=""Data""/><AnotherElement>11</AnotherElement></Test>"
        Dim unXData As New UnescapedXmlDiagnosticData(testString)
        ts.TraceData(TraceEventType.Error, 38, unXData)
        ts.TraceEvent(TraceEventType.Error, 38, testString)
        ts.Flush()
        ts.Close()
        DisplayProperties(ts)
        Process.Start("notepad.exe", "TraceOutput.xml")
        Console.WriteLine("Press the enter key to exit")
        Console.ReadLine()

    End Sub

    Private Shared Sub DisplayProperties(ByVal ts As TraceSource)
        Console.WriteLine("IsThreadSafe? " + CType(ts.Listeners("eventListener"), EventSchemaTraceListener).IsThreadSafe.ToString())
        Console.WriteLine("BufferSize =  " + CType(ts.Listeners("eventListener"), EventSchemaTraceListener).BufferSize.ToString())
        Console.WriteLine("MaximumFileSize =  " + CType(ts.Listeners("eventListener"), EventSchemaTraceListener).MaximumFileSize.ToString())
        Console.WriteLine("MaximumNumberOfFiles =  " + CType(ts.Listeners("eventListener"), EventSchemaTraceListener).MaximumNumberOfFiles.ToString())
        Console.WriteLine("Name =  " + CType(ts.Listeners("eventListener"), EventSchemaTraceListener).Name)
        Console.WriteLine("TraceLogRetentionOption =  " + CType(ts.Listeners("eventListener"), EventSchemaTraceListener).TraceLogRetentionOption.ToString())
        Console.WriteLine("TraceOutputOptions =  " + CType(ts.Listeners("eventListener"), EventSchemaTraceListener).TraceOutputOptions.ToString())
    End Sub
End Class

Комментарии

Класс EventSchemaTraceListener обеспечивает трассировку комплексных событий, соответствующих схеме. Вы можете использовать сквозную трассировку для системы с разнородными компонентами, которые пересекают границы потоков, AppDomainпроцессов и компьютеров. Стандартизованная схема событий позволяет выполнять трассировку через эти границы. Схема позволяет добавлять пользовательские, совместимые со схемой элементы. Для отображения данных события можно использовать средство просмотра трассировки служб (SvcTraceViewer.exe ).

EventSchemaTraceListener настраивается для ведения журнала производительности с неявной поддержкой трассировки без блокировок.

Класс EventSchemaTraceListener преобразует данные трассировки и отладки в текстовый поток с кодировкой XML. Описание выходных данных XML показано в таблицах далее в этом разделе.

В коде EventSchemaTraceListener можно создать объект . Кроме того, для платформа .NET Framework приложений можно включить или отключить EventSchemaTraceListener объект с помощью файла конфигурации приложения, а затем использовать настроенный EventSchemaTraceListener объект в приложении. Сведения об использовании файлов конфигурации для трассировки и отладки в платформа .NET Framework приложениях см. в разделе Схема параметров трассировки и отладки.

Чтобы настроить EventSchemaTraceListener объект в приложении платформа .NET Framework, измените файл конфигурации, соответствующий имени приложения. В этом файле можно добавить, удалить или задать свойства прослушивателя. Файл конфигурации должен быть отформатирован следующим образом:

<configuration>  
    <system.diagnostics>  
        <sources>  
            <source name="TestSource" >  
                <listeners>  
                    <!--Remove the default trace listener for better performance.-->  
                    <remove name="Default"/>  
                    <!--Note: Removing the default trace listener prevents the dialog box   
                    from being displayed for Debug.Fail or Debug.Assert commands that are   
                    executed in user mode.-->  
                    <add name="eventListener"   
                      type="System.Diagnostics.EventSchemaTraceListener,  system.core"  
                      initializeData="TraceOutput.xml"   
                      traceOutputOptions="ProcessId, DateTime, Timestamp"   
                      bufferSize="65536"  
                      maximumFileSize="20480000"  
                      logRetentionOption="LimitedCircularFiles"  
                      maximumNumberOfFiles="2"/>  
                </listeners>  
            </source>  
        </sources>  
    </system.diagnostics>  

Класс EventSchemaTraceListener наследует Filter свойство от базового класса TraceListener. Свойство Filter позволяет использовать дополнительный уровень фильтрации выходных данных трассировки в прослушивателе. Если фильтр присутствует, Trace методы прослушивателя трассировки вызывают ShouldTrace метод фильтра, чтобы определить, следует ли выдавать трассировку.

При попытке записи в файл, который используется или недоступен, к имени файла автоматически добавляется суффикс GUID.

Примечание

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

В следующей таблице описаны элементы и атрибуты выходных данных XML.

Элемент Атрибуты Вывод Примечания
CallStack Нет Зависит от наличия флага Callstack в свойстве TraceOutputOptions . Специальные символы, такие как > или < , заменяются escape-последовательности. См. таблицу перевода escape-символов в следующей таблице.
Computer Нет Всегда присутствует. Этот элемент представляет значение MachineName свойства .
Correlation ActivityID Всегда присутствует. Если ActivityID параметр не указан, по умолчанию используется пустой GUID.
RelatedActivityID Зависит от наличия relatedActivityId параметра в вызове Trace метода. Атрибут RelatedActivityID соответствует параметру relatedActivityIdTraceTransfer метода .
Data Нет Всегда присутствует. Этот элемент представляет входные данные параметра (data). Для каждого объекта данных предоставляется один элемент. В случае журналов Data событий элемент содержит escape-данные XML. В случае с журналами Data данных элемент содержит неэкранированные данные. В выходных данных журнала данных используется ToString метод переданных объектов данных.
Event Нет Всегда присутствует. Этот элемент содержит событие трассировки.
EventData Нет Присутствует для журналов событий. Этот элемент представляет входные данные параметра (message, args). Он содержит Data элементы с экранируемыми XML-данными, созданными путем вызова TraceEvent метода .
EventID Нет Всегда присутствует. Этот элемент представляет входные данные параметра (id).
Execution ProcessID Зависит от наличия флага ProcessId в свойстве TraceOutputOptions . Атрибут ProcessID указан в TraceEventCache.
ThreadID Присутствует при ProcessID наличии. Атрибут ThreadID указан в TraceEventCache.
Level Нет Всегда присутствует. Этот элемент представляет входные данные параметра (числовое значение ).eventType Значения параметров, превышающие 255, выводятся на уровне 8, который представляет TraceEventType.Information. Типы Criticalсобытий трассировки , Error, Warning, Informationи Verbose отображаются на уровнях 1, 2, 4, 8 и 10 соответственно.
LogicalOperationStack Нет Зависит от наличия флага LogicalOperationStack в свойстве TraceOutputOptions . Может существовать только одна логическая операция. Поэтому значения записываются как LogicalOperation узлы в элементе LogicalOperationStack .
OpCode Нет Присутствует, если Level значение больше 255. Этот элемент представляет типы событий Trace с числовыми значениями больше 255. Start, Stop, Suspend, Resumeили Transfer отображаются на уровнях 1, 2, 4, 8 и 10 соответственно.
Provider GUID Всегда присутствует. Всегда пусто.
RenderingInfo Culture Всегда присутствует. Этот атрибут представляет строку ресурса для типа события. Это всегда "en-EN\".
System Name Всегда присутствует.
TimeCreated SystemTime Зависит от наличия флага DateTime в свойстве TraceOutputOptions . Время — это значение TraceEventCache.DateTime свойства . Это свойство выражается как координированное универсальное время
TimeStamp Нет Зависит от наличия флага Timestamp в свойстве TraceOutputOptions . Этот элемент указан в TraceEventCache.
UserData Нет Присутствует для журналов данных. Этот элемент содержит Data элементы с неэкранизованными, предоставленными пользователем TraceData данными из метода .

В следующей таблице показаны символы, которые экранируются в выходных данных XML. Экранирование происходит во всех элементах и атрибутах, кроме UserData элемента , который содержит предоставленные пользователем неэкранированные данные. Элемент UserData является результатом вызовов TraceData метода .

Escape-символ Значение
& &
< <
> >
" "
|'
0xD
0xA

Конструкторы

EventSchemaTraceListener(String)

Инициализирует новый экземпляр класса EventSchemaTraceListener, используя указанный файл в качестве получателя выходных данных отладки и трассировки.

EventSchemaTraceListener(String, String)

Инициализирует новый экземпляр класса EventSchemaTraceListener заданным именем, используя указанный файл в качестве получателя выходных данных отладки и трассировки.

EventSchemaTraceListener(String, String, Int32)

Инициализирует новый экземпляр класса EventSchemaTraceListener заданным именем и указанным размером буфера, используя указанный файл в качестве получателя выходных данных отладки и трассировки.

EventSchemaTraceListener(String, String, Int32, TraceLogRetentionOption)

Инициализирует новый экземпляр класса EventSchemaTraceListener заданным именем и указанным размером буфера, используя указанный файл с заданной политикой хранения журнала в качестве получателя выходных данных отладки и трассировки.

EventSchemaTraceListener(String, String, Int32, TraceLogRetentionOption, Int64)

Инициализирует новый экземпляр класса EventSchemaTraceListener заданным именем и указанным размером буфера, используя указанный файл с заданной политикой хранения и максимальным размером журнала в качестве получателя выходных данных отладки и трассировки.

EventSchemaTraceListener(String, String, Int32, TraceLogRetentionOption, Int64, Int32)

Инициализирует новый экземпляр класса EventSchemaTraceListener заданным именем и указанным размером буфера, используя в качестве получателя выходных данных отладки и трассировки указанный файл с заданной политикой хранения и максимальным размером журнала, а также счетчиком файлов.

Свойства

Attributes

Возвращает настраиваемые атрибуты прослушивателя трассировки, определенные в файле конфигурации приложения.

(Унаследовано от TraceListener)
BufferSize

Возвращает размер выходного буфера.

Filter

Получает или задает фильтр трассировки для прослушивателя трассировки.

(Унаследовано от TraceListener)
IndentLevel

Возвращает или задает уровень отступа.

(Унаследовано от TraceListener)
IndentSize

Возвращает или задает число пробелов в отступе.

(Унаследовано от TraceListener)
IsThreadSafe

Возвращает значение, указывающее, является ли прослушиватель трассировки потокобезопасным.

MaximumFileSize

Возвращает максимальный размер файла журнала.

MaximumNumberOfFiles

Возвращает максимальное количество файлов журнала.

Name

Возвращает или задает имя для данного TraceListener.

(Унаследовано от TraceListener)
NeedIndent

Возвращает или задает значение, указывающее, нужен ли отступ в выходных данных.

(Унаследовано от TraceListener)
TraceLogRetentionOption

Возвращает для файла параметр хранения журнала трассировки.

TraceOutputOptions

Возвращает или задает параметры выходных данных трассировки.

(Унаследовано от TraceListener)
Writer

Возвращает или задает основной модуль записи текста, записывающий данные в файл журнала.

Методы

Close()

Закрывает файл журнала данного прослушивателя. Теперь этот журнал не будет получать выходные данные отладки или трассировки.

CreateObjRef(Type)

Создает объект, который содержит всю необходимую информацию для создания прокси-сервера, используемого для взаимодействия с удаленным объектом.

(Унаследовано от MarshalByRefObject)
Dispose()

Освобождает все ресурсы, занятые модулем TraceListener.

(Унаследовано от TraceListener)
Dispose(Boolean)

Удаляет этот объект TextWriterTraceListener.

(Унаследовано от TextWriterTraceListener)
Equals(Object)

Определяет, равен ли указанный объект текущему объекту.

(Унаследовано от Object)
Fail(String)

Посылает сообщение об ошибке в прослушиватель, создаваемый при реализации класса TraceListener.

(Унаследовано от TraceListener)
Fail(String, String)

Записывает в файл журнала сведения об ошибках, в том числе базовое и подробное сообщение об ошибке.

Flush()

Вызывает запись буферизованных данных в журнал этого прослушивателя.

GetHashCode()

Служит хэш-функцией по умолчанию.

(Унаследовано от Object)
GetLifetimeService()
Устаревшие..

Извлекает объект обслуживания во время существования, который управляет политикой времени существования данного экземпляра.

(Унаследовано от MarshalByRefObject)
GetSupportedAttributes()

Возвращает настраиваемые атрибуты конфигурации XML, поддерживаемые прослушивателем трассировки.

GetType()

Возвращает объект Type для текущего экземпляра.

(Унаследовано от Object)
InitializeLifetimeService()
Устаревшие..

Получает объект службы времени существования для управления политикой времени существования для этого экземпляра.

(Унаследовано от MarshalByRefObject)
MemberwiseClone()

Создает неполную копию текущего объекта Object.

(Унаследовано от Object)
MemberwiseClone(Boolean)

Создает неполную копию текущего объекта MarshalByRefObject.

(Унаследовано от MarshalByRefObject)
ToString()

Возвращает строку, представляющую текущий объект.

(Унаследовано от Object)
TraceData(TraceEventCache, String, TraceEventType, Int32, Object)

Записывает в файл журнала информацию трассировки, единичный объект данных и сведения о событии.

TraceData(TraceEventCache, String, TraceEventType, Int32, Object[])

Записывает в файл журнала информацию трассировки, несколько объектов данных и сведения о событии.

TraceEvent(TraceEventCache, String, TraceEventType, Int32)

Записывает сведения трассировки и сведения о событиях в специальные выходные данные прослушивателя.

(Унаследовано от TraceListener)
TraceEvent(TraceEventCache, String, TraceEventType, Int32, String)

Записывает в файл журнала информацию трассировки, сообщение и сведения о событиях.

TraceEvent(TraceEventCache, String, TraceEventType, Int32, String, Object[])

Записывает в файл журнала информацию трассировки, форматированное сообщение и сведения о событиях.

TraceTransfer(TraceEventCache, String, Int32, String, Guid)

Записывает в файл журнала информацию трассировки, включая удостоверение связанного действия, сообщение и сведения о событии.

Write(Object)

Записывает значение метода ToString() объекта в прослушиватель, создаваемый при реализации класса TraceListener.

(Унаследовано от TraceListener)
Write(Object, String)

Записывает имя категории и значение метода ToString() объекта в прослушиватель, создаваемый при реализации класса TraceListener.

(Унаследовано от TraceListener)
Write(String)

Записывает сообщение в файл журнала, не указывая какой-либо дополнительной контекстной информации.

Write(String, String)

Записывает имя категории и сообщение в прослушиватель, создаваемый при реализации класса TraceListener.

(Унаследовано от TraceListener)
WriteIndent()

Записывает отступ в прослушиватель, создаваемый при реализации этого класса, и восстанавливает для свойства NeedIndent значение false.

(Унаследовано от TraceListener)
WriteLine(Object)

Записывает значение метода ToString() объекта, заканчивающееся знаком завершения строки, в прослушиватель, создаваемый при реализации класса TraceListener.

(Унаследовано от TraceListener)
WriteLine(Object, String)

Записывает имя категории и значение метода ToString() объекта, заканчивающееся знаком завершения строки, в прослушиватель, создаваемый при реализации класса TraceListener.

(Унаследовано от TraceListener)
WriteLine(String)

Записывает в файл журнала сообщение, после которого следует текущий разделитель строк, без какой-либо дополнительной контекстной информации.

WriteLine(String, String)

Записывает имя категории и сообщение, заканчивающееся знаком завершения строки, в прослушиватель, создаваемый при реализации класса TraceListener.

(Унаследовано от TraceListener)

Применяется к