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


Работа с файлами журнала

Чтобы открыть файл журнала для чтения, вызовите PdhOpenQuery и укажите путь к файлу журнала. Чтобы открыть файл журнала для записи, необходимо вызвать PdhOpenLog. Чтобы закрыть файл журнала, вызовите PdhCloseQuery или PdhCloseLog в зависимости от функции, используемой для открытия файла журнала.

Чтение из файла журнала

Чтение данных о производительности из файла журнала совпадает с чтением данных из источника в режиме реального времени— вы открываете запрос, добавляете счетчики в запрос и вызываете PdhCollectQueryData для сбора примера из файла журнала. PdhCollectQueryData возвращает PDH_NO_MORE_DATA после достижения конца файла журнала.

Каждая запись в файле журнала содержит метку времени, когда она была первоначально собрана и записана в файл журнала. Чтобы получить метку времени для первого и последнего примера в файле журнала, вызовите функцию PdhGetDataSourceTimeRange. Если вы хотите ограничить примеры, которые вы читаете из журнала, до определенного диапазона времени, см. настройка диапазона времени длязапроса.

Если вы не знаете, какие объекты производительности и счетчики существуют в файле журнала, можно вызвать PdhEnumObjects, чтобы определить список объектов. При наличии объекта можно вызвать PdhEnumObjectItems или PdhExpandWildCardPath, чтобы получить список экземпляров и счетчиков объекта, содержащихся в файле журнала.

При вызове PdhEnumObjectItemsиспользуйте списки экземпляров и счетчиков, чтобы создать путь для каждого возможного сочетания экземпляров и счетчиков. При вызове PdhAddCounter для добавления счетчика в запрос функция завершится ошибкой, если файл журнала не содержит заданное сочетание.

Если вы используете PdhExpandWildCardPath, можно создать путь, содержащий подстановочный знак для имени экземпляра и счетчика, например \object(*)\*. Функция возвращает PDH_INVALID_PATH, если объект не содержит ни одного экземпляра. В этом случае вызовите PdhExpandWildCardPath, где подстановочный знак должен использоваться только для счетчика, например \object\*.

Новые операционные системы могут считывать файлы журналов, созданные в старых операционных системах; однако файлы журналов, созданные в Windows Vista и более поздних операционных системах, не могут быть прочитаны в более ранних операционных системах.

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

Чтение из нескольких файлов журнала

Если необходимо создать запрос, который считывается из нескольких файлов журнала, вызовите PdhBindInputDataSource для привязки файлов журнала к ним. Затем необходимо использовать функции PDH, которые заканчиваются на H, например, PdhOpenQueryH.

Запись в файл журнала

Перед записью в файл журнала вызовите PdhOpenQuery, чтобы создать запрос и указать источник данных производительности, данные в режиме реального времени или файл журнала. Затем добавьте счетчики, которые вы хотите запросить.

Чтобы открыть целевой файл, вызовите PdhOpenLog. Укажите запрос при открытии файла журнала. Чтобы собрать данные о производительности и записать его в файл журнала, вызовите PdhUpdateLog.

Если данные счетчика записываются в файл журнала с разделителями-запятыми (.csv) или файл журнала с табуляцией (.tsv), и путь содержит экземпляр подстановочного знака, то путь разворачивается, и в файл журнала включаются только те экземпляры, которые существуют на момент разворачивания пути. Однако для двоичных файлов журнала (.blg) или SQL подстановочный знак не раскрывается, поэтому файл журнала содержит экземпляры, созданные во время ведения журнала.

См. пример записи данных о производительности в файл журнала в разделе Writing Performance Data to a Log File.

Сжатие файла журнала

ФункциюpdhComputeCounterStatistics можно использовать для сжатия файла журнала с помощью функцииPdhComputeCounterStatistics. Например, прочитайте десять записей из файла журнала, вызовите PdhComputeCounterStatistics для вычисления среднего значения, а затем записать среднее значение в выходной файл журнала.

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