公用日志文件系统

System.IO.Log 命名空间定义用于登录到面向记录的顺序 I/O 系统的接口。 使用此命名空间中的类,您可以实现自己的诊断日志记录系统或事务处理系统。 该命名空间还提供了此接口的一个实现(使用基于简单文件的日志)以及另一个使用 ws2003r2 和 Windows Vista 提供的公用日志文件系统 (CLFS) 的实现。

System.IO.Log 命名空间

System.IO.Log 命名空间定义用于登录到面向记录的顺序 I/O 系统的接口。 可以使用此接口的实现读取和写入日志记录。 当日志记录追加到这类实现时,会为每一条日志记录提供一个唯一的序列号。 在给定的记录序列中,序列号是严格递增的,而且不同记录序列中的编号不具有可比性。 序列号由 SequenceNumber 结构表示。 此外,记录序列还提供了一种机制来保留基础存储区中的空间。 可以利用此保留机制来确保为以后的日志记录保留必要的空间。

FileRecordSequenceLogRecordSequence 类提供了此接口的两种不同实现。 FileRecordSequence 是基于文件系统中的单一日志文件的记录序列。

另一方面,LogRecordSequence 类提供记录序列接口在公用日志文件系统 (CLFS) 日志之上的实现。 有关此实现的更多信息,请参见“System.IO.Log 抽象”一节。

CLFS

CLFS 提供一种高性能的通用文件日志服务,专用客户端应用程序可以使用该服务,而且多个客户端可以共享它以优化日志访问。

日志体系结构

CLFS 是一个 ARIES 日志管理器。 它按照顺序保存日志记录,可以确保即便在发生系统故障后也能保留刷新的日志记录。 可以使用 CLFS 来管理日志和设置应用程序策略。 CLFS 使用下列抽象来实现日志记录:

  • 记录是客户端写入的数据单元。

  • 物理日志实际上是一组用来存储一个或多个日志流的文件和属性。 日志流是客户端记录的一系列日志记录。 它像是一个物理日志。 专用日志仅有一个未命名的流。 多路日志有一个或多个命名的流,您可以在以后为多路日志创建更多的流。 可以记录的客户端在任何类型的日志中都有一个或多个日志流。 但是,日志在创建后便无法从一种类型转换为其他类型。

多路日志表示两个共享同一日志的应用程序或子系统之间的契约性协议。 多路日志中的每个流向其客户端所有者显示时就好像存储在一个专用日志中一样。 使用多路日志的主要优势在于系统 I/O 开销由多个流共同承担,因此与使用若干个专用日志相比,系统性能可能更好一些。 多路日志中的记录和日志块通常写入同一磁盘柱面,这会最大限度地减少寻道时间并降低 I/O 延迟。

通过内部的客户端-服务器支持,可以将日志文件访问定向到本地磁盘或远程系统上的磁盘。 在一个群集内,日志文件可以使用标准 OS 机制故障转移到另一个系统。 所有对日志的写入都在客户端缓冲,直到需要刷新或新的缓冲区。 在可能的情况下,数据直接从客户端缓冲区写入磁盘而不用复制。 对读取进行缓存,以便在执行恢复操作、备份或者事务突然中止的过程中减少磁盘访问次数。

物理日志实际上作为“基日志文件”(blf) 存储,它保存元数据和任意数目的容器文件(或文件内的流)。 您可以定义将要创建日志的位置,并直接创建日志容器。 至少需要添加两个容器,日志才能使用。 但是,不用任何容器就可以设置日志策略。

System.IO Log 抽象

LogRecordSequence 类提供记录序列接口在公用日志文件系统 (CLFS) 日志之上的实现。 除了标准的面向记录的功能外,该类还提供了一个策略模型,用于避免出现日志已满的情况并对同一个物理文件上的客户端进行多路复用。 它与 LogStore 类一起使用,后者提供了直接操作和管理 CLFS 日志文件的接口。 LogStore 类和 LogRecordSequence 类之间的关系类似于磁盘文件和 FileStream 对象之间的关系。 磁盘文件提供实际存储区,并具有长度和上次访问时间等属性,而 FileStream 对象提供文件的视图,利用该视图可以从实际存储区中读取以及向其中写入数据。 与之类似,LogStore 类具有策略和磁盘范围集合等属性;LogRecordSequence 类提供面向记录的机制,用于读取和写入数据。

FileRecordSequence 类表示的文件记录序列不同,LogStore 实例将其数据存储在 LogExtent 实例表示的磁盘范围的集合中。 给定 LogStore 实例中的所有范围都具有统一的大小,空间以范围增量的形式添加到 LogStore 实例中及从其中移除。

实际的日志记录由 LogRecord 类的实例表示。

策略

LogStore 实例可以具有与自己关联的策略。 它们由 LogPolicy 实例表示。 策略定义日志应遵循的规则(例如最大范围数和最小大小),以及对在特定条件下扩大或缩小 LogStore 的指令。 此外,您还可以指定 LogStore 实例是可存档还是不可存档。

策略针对每个日志设置,而且是可变的。这表示,一旦日志的每个句柄都关闭了,策略也就不再存在了。

安全性

由标准 NTFS ACL(访问控制列表)对日志提供保护。 建议不要将日志存储在 FAT 驱动器上,因为 FAT 系统不提供保护。

请参见

概念

简单文件日志系统

Footer image

向 Microsoft 发送对本主题的评论。

版权所有 (C) 2007 Microsoft Corporation。保留所有权利。