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


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

Чтобы открыть файл журнала для чтения, вызовите 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 подстановочный знак не разворачивается, чтобы файл журнала содержал экземпляры, созданные во время ведения журнала.

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

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

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

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