Azure Blob Storage   zodpovězená otázka

Azure

Ahoj,

chci používat blob storage na logování chyb a dalších akcí. Mám následující kód:

CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();

                // Retrieve a reference to a container. 
                CloudBlobContainer container = blobClient.GetContainerReference(containerName);
                // Create the container if it doesn't already exist.
                if (container.CreateIfNotExists())
                    container.SetPermissions(new BlobContainerPermissions { PublicAccess = BlobContainerPublicAccessType.Blob });

                DateTime today = LocalTime.Today;
                string blobName = string.Format("log_{0}_{1}_{2}", today.Day, today.Month, today.Year);
                // Retrieve reference to a blob named "myblob".
                CloudBlockBlob blockBlob = container.GetBlockBlobReference(blobName);
                string text = blockBlob.DownloadText();
                text += Environment.NewLine + message;
                blockBlob.UploadText(text);

Tohle řešení funguje, ale nelíbí se mi, protože nejdřív musím celý obsah stáhnout, přidat novou zprávu a znovu uložit.

Původně jsem zkoušel tohle, ale CloudBlobStream neimplementuje vlastnost Lenght a ani nijak jinak se mi nepovedlo ho donutit skočit na konec streamu.

using (CloudBlobStream stream = blockBlob.OpenWrite())
                {
                    var bytes = ASCIIEncoding.ASCII.GetBytes(message);
                    stream.Write(bytes, (int)stream.Length, bytes.Length);
                }

Nevíte někdo jak to hezky vyřešit? Díky

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Ahoj,

musíš používat blob storage? Pro logování se dá krásně využít TableStorage

internal class LogRecord : TableEntity
{
    public LogRecord()
    {
    }

    public LogRecord(Exception error)
    {
        var now = DateTime.UtcNow;
        this.PartitionKey = string.Format("LogEntry {0:yyyy-MM}", now);
        this.RowKey = string.Format("{0:dd HH:mm:ss.fff} - id:{1}", now, Guid.NewGuid());

        this.ErrorMessage = error.Message;
        this.ErrorStackTrace = error.StackTrace;
        this.ErrorText = error.ToString();
        this.Time = DateTime.Now;
        try
        {
            this.Url = string.Format("{0}: {1}", HttpContext.Current.Request.HttpMethod, HttpContext.Current.Request.Url);
        }
        catch
        {
            this.Url = "Server error";
        }
    }

    public DateTime? Time { get; set; }

    public string Url { get; set; }

    public string ErrorMessage { get; set; }

    public string ErrorText { get; set; }

    public string ErrorStackTrace { get; set; }

    public void WriteToAzureTableStorage()
    {
        string connectionString =
            ConfigurationManager.ConnectionStrings["StorageConnectionString"].ConnectionString;
        CloudStorageAccount storageAccount = CloudStorageAccount.Parse(connectionString);
        CloudTableClient tableClient = storageAccount.CreateCloudTableClient();
        CloudTable table = tableClient.GetTableReference("Log");
        TableOperation insertOperation = TableOperation.Insert(this);
        var resuĺt = table.Execute(insertOperation);
    }
}
nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback