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 соответствует параметру relatedActivityId TraceTransfer метода . |
|
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 значение |
WriteLine(Object) |
Записывает значение метода ToString() объекта, заканчивающееся знаком завершения строки, в прослушиватель, создаваемый при реализации класса TraceListener. (Унаследовано от TraceListener) |
WriteLine(Object, String) |
Записывает имя категории и значение метода ToString() объекта, заканчивающееся знаком завершения строки, в прослушиватель, создаваемый при реализации класса TraceListener. (Унаследовано от TraceListener) |
WriteLine(String) |
Записывает в файл журнала сообщение, после которого следует текущий разделитель строк, без какой-либо дополнительной контекстной информации. |
WriteLine(String, String) |
Записывает имя категории и сообщение, заканчивающееся знаком завершения строки, в прослушиватель, создаваемый при реализации класса TraceListener. (Унаследовано от TraceListener) |