使用日志文件

若要打开日志文件进行读取,请调用 PdhOpenQuery 并指定日志文件的路径。 若要打开日志文件进行写入,必须调用 PdhOpenLog。 若要关闭日志文件,请调用 PdhCloseQueryPdhCloseLog ,具体取决于用于打开日志文件的函数。

从日志文件读取

从日志文件中读取性能数据与从实时源读取数据相同- 打开查询、向查询添加计数器并调用 PdhCollectQueryData 从日志文件中收集示例。 当到达日志文件末尾时,PdhCollectQueryData 将返回PDH_NO_MORE_DATA。

日志文件中的每个示例都包含最初收集并写入日志文件的时间的时间戳。 若要检索日志文件中第一个和最后一个示例的时间戳,请调用 PdhGetDataSourceTimeRange 函数。 如果要将从日志中读取的示例限制为特定时间范围,请参阅 设置查询的时间范围

如果不知道日志文件中存在哪些性能对象和计数器,可以调用 PdhEnumObjects 来确定对象列表。 给定对象后,可以调用 PdhEnumObjectItemsPdhExpandWildCardPath 来检索日志文件中包含的对象的实例和计数器的列表。

如果调用 PdhEnumObjectItems,请使用实例和计数器列表为每个可能的实例和计数器组合创建路径。 调用 PdhAddCounter 将计数器添加到查询时,如果日志文件不包含给定的组合,该函数将失败。

如果使用 PdhExpandWildCardPath,则可以创建包含实例名称和计数器通配符的路径,例如 \object (*) \*。 如果对象不包含实例,该函数将返回PDH_INVALID_PATH。 在这种情况下,仅对计数器使用通配符调用 PdhExpandWildCardPath ,例如 \object\*。

较新的操作系统可以读取旧操作系统上生成的日志文件;但是,无法在早期操作系统上读取在 Windows Vista 和更高版本的操作系统上创建的日志文件。

有关从日志文件读取数据的示例,请参阅 从日志文件读取性能数据

从多个日志文件读取

如果需要创建从多个日志文件读取的查询,请调用 PdhBindInputDataSource 将日志文件绑定在一起。 然后,需要使用以“H”结尾的 PDH 函数,例如 PdhOpenQueryH

写入日志文件

在写入日志文件之前,请调用 PdhOpenQuery 来创建查询,并指定性能数据的源(实时数据或日志文件)。 然后,添加要查询的计数器。

若要打开目标文件,请调用 PdhOpenLog。 打开日志文件时指定查询。 若要收集性能数据并将其写入日志文件,请调用 PdhUpdateLog

如果将计数器数据写入逗号分隔的 (.csv) 或制表符分隔的 (.tsv) 日志文件,并且路径包含通配符实例,则路径将展开,并且仅在扩展路径时存在的实例包含在日志文件中。 但是,对于二进制 (.blg) 或SQL日志文件,通配符不会展开,以便日志文件包含日志记录期间创建的实例。

有关将数据写入日志文件的示例,请参阅 将数据写入日志文件

压缩日志文件

可以使用 PdhComputeCounterStatistics 函数压缩日志文件。 例如,从日志文件中读取十条记录,调用 PdhComputeCounterStatistics 来计算平均值,然后将平均值写入输出日志文件。

以下主题提供有关使用日志文件的其他信息。