LogStore 类
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
表示日志结构化的存储区。
public ref class LogStore sealed : IDisposable
public sealed class LogStore : IDisposable
type LogStore = class
interface IDisposable
Public NotInheritable Class LogStore
Implements IDisposable
- 继承
-
LogStore
- 实现
示例
下面的示例演示如何将 LogStore 存档到 XML 文档。
class LogBackup
{
static void ArchiveToXML(LogStore logStore, string fileName)
{
LogArchiveSnapshot snapshot = logStore.CreateLogArchiveSnapshot();
XmlTextWriter writer = new XmlTextWriter(fileName, Encoding.ASCII);
writer.WriteStartElement("logArchive");
foreach(FileRegion region in snapshot.ArchiveRegions)
{
writer.WriteStartElement("fileRegion");
writer.WriteElementString("path", region.Path);
writer.WriteElementString("length", region.FileLength.ToString());
writer.WriteElementString("offset", region.Offset.ToString());
using(Stream dataStream = region.GetStream())
{
byte[] data = new byte[dataStream.Length];
dataStream.Read(data, 0, data.Length);
writer.WriteElementString("data", Convert.ToBase64String(data));
}
writer.WriteEndElement();
}
writer.WriteEndElement();
writer.Close();
logStore.SetArchiveTail(snapshot.LastSequenceNumber);
}
static void RestoreFromXML(string fileName)
{
using(XmlTextReader reader = new XmlTextReader(fileName))
{
reader.ReadStartElement("logArchive");
while(reader.IsStartElement())
{
string path = reader.ReadElementString("path");
long length = Int64.Parse(reader.ReadElementString("length"));
long offset = Int64.Parse(reader.ReadElementString("offset"));
string dataString = reader.ReadElementString("data");
byte[] data = Convert.FromBase64String(dataString);
FileStream fileStream;
using(fileStream = new FileStream(path, FileMode.OpenOrCreate, FileAccess.Write))
{
fileStream.SetLength(length);
fileStream.Position = offset; fileStream.Write(data, 0, data.Length);
}
}
reader.ReadEndElement();
}
}
}
Friend Class LogBackup
Private Shared Sub ArchiveToXML(ByVal logStore As LogStore, ByVal fileName As String)
Dim snapshot As LogArchiveSnapshot = logStore.CreateLogArchiveSnapshot()
Dim writer As New XmlTextWriter(fileName, Encoding.ASCII)
writer.WriteStartElement("logArchive")
For Each region As FileRegion In snapshot.ArchiveRegions
writer.WriteStartElement("fileRegion")
writer.WriteElementString("path", region.Path)
writer.WriteElementString("length", region.FileLength.ToString())
writer.WriteElementString("offset", region.Offset.ToString())
Using dataStream As Stream = region.GetStream()
Dim data(dataStream.Length - 1) As Byte
dataStream.Read(data, 0, data.Length)
writer.WriteElementString("data", Convert.ToBase64String(data))
End Using
writer.WriteEndElement()
Next region
writer.WriteEndElement()
writer.Close()
logStore.SetArchiveTail(snapshot.LastSequenceNumber)
End Sub
Private Shared Sub RestoreFromXML(ByVal fileName As String)
Using reader As New XmlTextReader(fileName)
reader.ReadStartElement("logArchive")
Do While reader.IsStartElement()
Dim path = reader.ReadElementString("path")
Dim length = Int64.Parse(reader.ReadElementString("length"))
Dim offset = Int64.Parse(reader.ReadElementString("offset"))
Dim dataString = reader.ReadElementString("data")
Dim data() = Convert.FromBase64String(dataString)
Dim fileStream As FileStream
fileStream = New FileStream(path, FileMode.OpenOrCreate, FileAccess.Write)
Using fileStream
fileStream.SetLength(length)
fileStream.Position = offset
fileStream.Write(data, 0, data.Length)
End Using
Loop
reader.ReadEndElement()
End Using
End Sub
End Class
注解
LogRecordSequence 类提供记录序列接口在公用日志文件系统 (CLFS) 日志之上的实现。 它与 LogStore 类一起使用,该类提供了直接操作和管理 CLFS 日志文件的接口。 日志存储区提供跨一组磁盘范围的仅追加存储区。 LogStore 类表示此存储区,并提供了添加和移除容器、设置策略以及创建存档的方法。 它不提供从存储区中读取和写入存储区的方法;这些方法是由 LogRecordSequence 类提供的。
LogStore 类和 LogRecordSequence 类之间的关系类似于磁盘文件和 FileStream 对象之间的关系。 磁盘文件提供实际存储区,并具有诸如长度和上次访问时间这样的属性,而 FileStream 对象提供文件的视图,利用该视图可以从实际存储区中读取以及向其中写入数据。 与之类似,LogStore 类具有诸如策略和磁盘范围集合这样的属性,LogRecordSequence 类提供面向记录的机制,用于读取和写入数据。
与 FileRecordSequence 类表示的文件记录序列不同,LogStore 实例将其数据存储在 LogExtent 实例表示的磁盘范围的集合中。 给定 LogStore 实例中的所有范围都具有统一的大小,空间以范围增量的形式添加到 LogStore 实例中及从其中移除。 若要添加和移除日志范围,请使用可由 Add 属性返回的 Remove 对象的 LogExtentCollection 和 Extents 方法。
LogStore 实例可以具有与自己关联的策略。 这些策略由 LogPolicy 实例表示,这些实例可由 Policy 属性返回。 策略定义日志应遵循的规则(例如最大范围数和最小大小),以及对在特定条件下扩大或缩小 LogStore 的指令。 此外,还可以指定是否能够存档 LogStore 实例。 策略针对每个日志设置,而且是可变的。这表示,一旦日志的每个句柄都关闭了,策略也就不再存在了。
构造函数
LogStore(SafeFileHandle) |
为指定的句柄初始化 LogStore 类的新实例。 |
LogStore(String, FileMode) |
使用指定的路径和模式初始化 LogStore 类的新实例。 |
LogStore(String, FileMode, FileAccess) |
使用指定的路径、模式和访问权限初始化 LogStore 类的新实例。 |
LogStore(String, FileMode, FileAccess, FileShare) |
初始化 LogStore 类的新实例。 |
LogStore(String, FileMode, FileAccess, FileShare, FileSecurity) |
初始化 LogStore 类的新实例。 |
属性
Archivable |
获取指示是否可对 LogStore 实例进行存档的值。 |
BaseSequenceNumber |
获取与此 LogStore 实例中有效记录对应的最低序列号。 |
Extents |
获取一个日志范围集合,这些日志范围包含此日志存储区的数据。 |
FreeBytes |
获取日志存储区中的可用字节数。 |
Handle |
获取当前 LogStore 实例封装的日志文件的操作系统文件句柄。 |
LastSequenceNumber |
在派生类中被重写时,获取要追加到日志存储区中的下一条记录的序列号。 |
Length |
获取日志存储区的大小(以字节为单位)。 |
Policy |
获取与此日志存储区关联的策略。 |
StreamCount |
获取此日志存储区中日志流的数量。 |
方法
CreateLogArchiveSnapshot() |
拍摄日志存储区状态的快照,以制作备份。 |
CreateLogArchiveSnapshot(SequenceNumber, SequenceNumber) |
拍摄指定序列号之间的日志存储区状态的快照,以制作备份。 |
Delete(String) |
移除日志存储区。 |
Dispose() |
释放由 LogStore 使用的所有资源。 |
Equals(Object) |
确定指定对象是否等于当前对象。 (继承自 Object) |
GetHashCode() |
作为默认哈希函数。 (继承自 Object) |
GetType() |
获取当前实例的 Type。 (继承自 Object) |
MemberwiseClone() |
创建当前 Object 的浅表副本。 (继承自 Object) |
SetArchiveTail(SequenceNumber) |
设置存档尾数据的序列号。 |
ToString() |
返回表示当前对象的字符串。 (继承自 Object) |