* При перепечатке материалов ссылка на www.SeoLiga.ru обязательна!
Набор Listeners
8 февраля 2009
Все данные, сгенерированные классами Trace и Debug, направляются в набор Listeners. Это специальный набор, упорядочивающий классы, способные получать дан- ные от Trace, и предоставляющий доступ к этим классам. Каждый член набора Listeners в полном объеме получает данные, генерированные классами Trace и Debug, способ обработки этих данных зависит от слушателя.
Набор Listeners инициализируется единственным членом, экземпляром класса DefaultTraceListener. Как видно из имени этого класса, он автоматически создается и получает данные от Trace и Debug даже в отсутствие других слушателей, добавлен- ных явно. Полученные данные DefaultTraceListener передает отладчику и отобража- ет в окне Output среды разработки Visual Studio. Чтобы создать журнал трассиро- вочных сообщений, с которым можно работать независимо от отладчика, необхо- димо добавить по крайней мере один объект Listener. В библиотеке базовых классов .NET Framework есть два класса, позволяющих создать журнал Trace — EventLog- TraceListener и TextWriterTraceListener. Оба они являются потомками абстрактного .NET-класса Trace Listener, Запись трассировочных данных в текстовом формате Данные, генерируемые классом Text WriterTrace Listener, записываются в текстовый файл, в объект Stream либо в объект Text Writer. Например, у класса Text Writer есть свойство Console.Out, позволяющее создать класс TextWriterTraceListener, который записывает данные в окно Console. Объекты Stream и TextWriter также применяют- ся для записи данных в текстовые файлы. Чтобы создать объект Text WriterTrace - Listener для записи данных, генерированных классом Trace, в текстовый файл, преж- де необходимо создать или открыть файл, куда будут записываться данные. После этого следует создать экземпляр TextWriterTrace Listener, передав ему созданный или открытый файл. В завершение следует добавить TextWriterTraceListener к набору Listeners. Вот как это делается: Visual Basic .NET Открыть заданный файл или создать его, если он не существует, Dim myLog As New System.10.FileStream("C:\myFile.txt". IQ.FileMode.OpenOrCreate) Создать новый объект слушателя и приказать ему записывать выходные данные в файл myLog. Dim inyListener As New TextWriterTraceListener(rnyLog) Добавить объект myListener к набору Listeners. Trace,Listeners,Add(myListener) Visual C# // Открыть заданный файл или создать его, если он не существует, // Заметьте: путь к файлу необходимо указывать при помощи двойного слэша, // поскольку слэш является управляющим символом в С#. System.10.FileStream myLog = new System.10.FileStream("C:\\myFile.txt", System.10.FileMode.OpenOrCreate); // Создать новый объект слушателя и приказать ему // записывать выходные данные в файл rriyLog. TextWriterTraceListener myListener = new TextWriterTraceListener(myLog); // Добавить объект inyListener к набору Listeners. Trace.Listeners.Add(myListener); Примечание Если открыть существующий файл с помощью метода Ю.FileMode. OpenOrCreate, содержимое файла будет перезаписано. Чтобы добавить новые дан- ные к существующему файлу, объявляйте объект FileStream с помощью метода Ю. File Mode. Append. При исполнении кода из предыдущего примера все данные классов Trace и Debug будут записаны в объект myListener. Чтобы на самом деле записать эти данные в файл, необходимо сбросить буфер объекта Trace, вызвав метод Flush следующим образом: Visual Basic .NET Trace.Flush() Visual C# Trace.Fiush(); Можно также установить свойство Trace. Auto Flush в true (см. пример далее), это заставит сбрасывать буфер на диск после каждой записи в него. Visual Basic .NET Trace.AutoFlush - True Visual C# Trace.AutoFlush = true; Чтобы записать выходные данные объектов Trace и Debug в текстовый файл, сде- лайте следующее. 1. Создайте экземпляр объекта FileStream, указывающий на нужный текстовый файл. 2. Создайте экземпляр TextWriterTraceListener, передав ему новый объект FUeStream. 3. Добавьте созданный объект Listener к набору Listeners. 4. Установите свойство Trace. Auto Flush в true или вызовите метод Trace. Flush после записи данных.