2016-07-13 4 views
1

Ich möchte einen "klassischen" Protokollansatz verwenden, bei dem Textzeilen in eine Textdatei geschrieben werden. Anstatt dies lokal zu speichern, möchte ich die Daten in einen Blockblob schreiben. Dies ist der Code:Protokollierung mit Azure BlockBlob (Schreiben in Textdateien mit mehreren Brennerszenarien)

CloudStorageAccount storageAccount = CloudStorageAccount.Parse(StorageConnectionString); 
CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient(); 
CloudBlobContainer share = blobClient.GetContainerReference("logStorage"); 
var logFile=share.GetAppendBlobReference("mylog.log"); 
logFile.AppendText("This is a log entry"); 

Dies funktioniert, aber nur in Szenarien Einzelschreiber als die documenation eindeutig für AppendText heißt es():

Diese API sollten streng in einem einzigen Schriftsteller Szenario verwendet werden, da Die API verwendet intern die Append-Offset-bedingte Kopfzeile, um doppelte Blöcke zu vermeiden, die in einem Szenario mit mehreren Schreibern nicht funktionieren.

Also, wenn ich brauche diese Funktionalität in mehrere Schriftsteller Szenarien, was muss ich als Alternative?

+0

haben Sie log4net Plugin für azurblauen Speicher versucht. Es ist ziemlich einfach, https://github.com/stemarie/log4net.Azure einzurichten. Sie können immer eine einfache Wrapperklasse haben, die ein Singleton-log4net-Objekt zurückgibt. – Aravind

+0

Ich kenne diesen Appender. Sie umgehen das Problem, indem sie jeden Log-Eintrag in einer separaten Datei speichern. Nicht wirklich eine kluge Lösung für dieses Problem. Auch: Das ist xml nicht Plan Text –

+0

oh yeah .. oder Sie können versuchen, einen separaten Dienst, der den Protokollordner auf Ihrem Rechner überwacht und es kann die Dateien hochladen, wenn es einen gibt. während die Hauptaufgabe/der Thread einfach Protokolle in einem Ordner erstellt. und der Uploader kümmert sich um den Upload. Im Uploader können Sie sehen, ob Sie TPL verwenden können, um so viele Aufgaben für so viele Dateien wie möglich zu starten. – Aravind

Antwort

1

@OleAlbers, wie @ TamraMyers-Microsoft sagte, die Beschreibung unten aus dem Abschnitt "Vermeidung doppelter oder verzögerter Anhänge" von REST API Append Block, es ist eine Möglichkeit für das Multi-Writer-Szenario.

In einem Szenario mit mehreren Schreibern kann jeder Client bedingte Header verwenden, dies ist jedoch möglicherweise kein optimaler Ansatz in Bezug auf die Leistung.

Aber die Referenz sagte auch wie unten.

Für den höchsten gleichzeitige Anfügen Durchsatz, Anwendungen redundanten Appends und verzögert Appends in ihrer Anwendungsschicht (beispielsweise hinzuen Epochen oder Sequenznummern in den Daten angehängt wird) verarbeiten sollen.

Ich denke, der einfache & beste Weg, um Ihre Bedürfnisse zu befriedigen ist eine Lock-freie Lösung, wie die neuen Dataflow library, einen Teil der Async CTP, die Multi-writer Operationen asyncly ausführen verwenden.

Sie können versuchen, sich auf das Lernprogramm How to: Write Messages to and Read Messages from a Dataflow Block zu beziehen, um Ihren Code für einen einzelnen Autor neu zu schreiben, damit er für das Szenario mit mehreren Verfassern geeignet ist.

0

Rufen Sie für das Multi-Writer-Szenario Append Block anstelle von AppendText. Siehe die AppendBlock-Methode in der Clientbibliothek.

Append Block bietet Atomizität, begrenzt die Nutzlast jedoch auf die Größe eines einzelnen Blocks.

Verwandte Themen