Condividi tramite


LogStore Classe

Definizione

Rappresenta un archivio organizzato in log.

public ref class LogStore sealed : IDisposable
public sealed class LogStore : IDisposable
type LogStore = class
    interface IDisposable
Public NotInheritable Class LogStore
Implements IDisposable
Ereditarietà
LogStore
Implementazioni

Esempio

Nell'esempio seguente viene illustrato come memorizzare un LogStore in un documento 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

Commenti

La classe LogRecordSequence fornisce un'implementazione dell'interfaccia della sequenza di record all'inizio di un log Common Log File System (CLFS). Questa classe viene utilizzata insieme alla classe LogStore che fornisce un'interfaccia per la modifica e la gestione diretta di un file di log CLFS. Un archivio di log fornisce un'archiviazione a solo accodamento in un set di extent del disco. La classe LogStore rappresenta quest'archiviazione e fornisce metodi per l'aggiunta e la rimozione di contenitori, per l'impostazione di criteri e per la creazione di archivi. Non fornisce metodi per la lettura e la scrittura nell'archivio. Questi metodi vengono forniti dalla classe LogRecordSequence.

La relazione tra la classe LogStore e la classe LogRecordSequence è simile alla relazione tra un file del disco e un oggetto FileStream. Il file del disco fornisce l'archivio effettiva e dispone di attributi quali la lunghezza e l'ora dell'ultimo accesso, mentre l'oggetto FileStream fornisce una visualizzazione del file che può essere utilizzata per operazioni di lettura o scrittura su di esso. Analogamente, la classe LogStore dispone di attributi quali i criteri e una raccolta di extent del disco e la classe LogRecordSequence fornisce un meccanismo orientato ai record per la lettura e la scrittura di dati.

Diversamente dalla sequenza di record di file rappresentata dalla classe FileRecordSequence, un'istanza LogStore memorizza i relativi dati in una raccolta di extent del disco, rappresentati da istanze LogExtent. Gli extent di una determinata istanza LogStore sono tutti della stessa dimensione e lo spazio viene aggiunto e rimosso da un'istanza LogStore per incrementi di extent. Per aggiungere e rimuovere extent del log, utilizzare i metodi Add e Remove dell'oggetto LogExtentCollection che può essere restituito dalla proprietà Extents.

A un'istanza LogStore possono essere associati criteri. Questi criteri sono rappresentati da istanze LogPolicy che possono essere restituite dalla proprietà Policy. I criteri specificano le regole che il log tenterà di seguire, ad esempio il numero massimo di extent e la dimensione minima, nonché le istruzioni sull'aumento o la riduzione dell'istanza LogStore in determinate condizioni. In inoltre possibile specificare se un'istanza LogStore può essere archiviata. I criteri vengono impostati per ogni singolo log e sono volatili. Ciò significa che, dopo la chiusura dell'ultimo handle del log, i criteri non esistono più.

Costruttori

LogStore(SafeFileHandle)

Inizializza una nuova istanza della classe LogStore per l'handle specificato.

LogStore(String, FileMode)

Inizializza una nuova istanza della classe LogStore con il percorso e la modalità specificati.

LogStore(String, FileMode, FileAccess)

Inizializza una nuova istanza della classe LogStore con il percorso, la modalità e l'accesso specificati.

LogStore(String, FileMode, FileAccess, FileShare)

Inizializza una nuova istanza della classe LogStore.

LogStore(String, FileMode, FileAccess, FileShare, FileSecurity)

Inizializza una nuova istanza della classe LogStore.

Proprietà

Archivable

Ottiene un valore che indica se questa istanza LogStore può essere archiviata.

BaseSequenceNumber

Ottiene il numero di sequenza più basso che corrisponde a un record valido in questa istanza LogStore.

Extents

Ottiene la raccolta di extent del log che contengono i dati per questo archivio dei log.

FreeBytes

Ottiene il numero di byte disponibili nell'archivio dei log.

Handle

Ottiene l'handle di file del sistema operativo per il file di log incapsulato nell'istanza LogStore corrente.

LastSequenceNumber

Quando sottoposto a override in una classe derivata, ottiene il numero di sequenza del record successivo da accodare all'archivio dei log.

Length

Ottiene la dimensione, in byte, dell'archivio dei log.

Policy

Ottiene i criteri associati a questo archivio dei log.

StreamCount

Ottiene il numero di flussi di registrazione in questo archivio dei log.

Metodi

CreateLogArchiveSnapshot()

Crea uno snapshot dello stato dell'archivio dei log per eseguire un backup.

CreateLogArchiveSnapshot(SequenceNumber, SequenceNumber)

Crea uno snapshot dello stato dell'archivio dei log tra i numeri di sequenza specificati per l'esecuzione di un backup.

Delete(String)

Rimuove l'archivio dei log.

Dispose()

Rilascia tutte le risorse usate da LogStore.

Equals(Object)

Determina se l'oggetto specificato è uguale all'oggetto corrente.

(Ereditato da Object)
GetHashCode()

Funge da funzione hash predefinita.

(Ereditato da Object)
GetType()

Ottiene l'oggetto Type dell'istanza corrente.

(Ereditato da Object)
MemberwiseClone()

Crea una copia superficiale dell'oggetto Object corrente.

(Ereditato da Object)
SetArchiveTail(SequenceNumber)

Imposta il numero di sequenza della coda di archiviazione.

ToString()

Restituisce una stringa che rappresenta l'oggetto corrente.

(Ereditato da Object)

Si applica a