使用日志文件

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

从日志文件读取

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

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

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

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

如果使用 PdhExpandWildCardPath,可以创建一个路径,其中包含实例名称和计数器的通配符,例如,对象 () \ * \ * 。 如果对象不包含 实例,则函数返回 PDH _ INVALID _ PATH。 在这种情况下,请仅对计数器使用通配符调用 PdhExpandWildCardPath, 例如 \ 对象 \ * 。

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

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

从多个日志文件读取

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

写入日志文件

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

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

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

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

压缩日志文件

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

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