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?
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
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 –
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