摘要:[Windows Azure]利用Blob建立例外處理紀錄器
這幾天研究Shared Access Signatures到有點頭痛,不過還好有點頭緒了,
先來講點輕鬆的好了,前面介紹過blob的程式撰寫,今天就來分享我在Blob上的小應用,
就是將例外處理(Exception)紀錄起來,程式碼如下:
public class ExceptionRecorder
{
public static readonly string CONTAINER_NAME = "exception-recorder";
public static readonly string LOG_PRE_NAME = "groupon_exception_";
public static void WriteExceptionToBlob(string ErrorStr)
{
WriteExceptionToBlob(ErrorStr, CONTAINER_NAME, LOG_PRE_NAME);
}
public static void WriteExceptionToBlob(string ErrorStr, string logSaveContainer, string logPreBlobName)
{
string blobName = logPreBlobName + DateTime.Now.ToString("yyyy_MMdd") + "_" + logPreBlobName + DateTime.Now.ToString("HH") + "_log";
var account = CloudStorageAccount.FromConfigurationSetting("Microsoft.WindowsAzure.Plugins.Diagnostics.ConnectionString");
var client = account.CreateCloudBlobClient();
CloudBlobContainer ExceptionContainer = client.GetContainerReference(logSaveContainer);
ExceptionContainer.CreateIfNotExist();
BlobContainerPermissions permissions = ExceptionContainer.GetPermissions();
permissions.PublicAccess = BlobContainerPublicAccessType.Container;
ExceptionContainer.SetPermissions(permissions);
CloudBlob blob = ExceptionContainer.GetBlobReference(blobName);
if (blob.Exists())
{
ErrorStr = blob.DownloadText() + "\n" + DateTime.Now.ToString("yyyy-MMdd-HHmmss") + "\n" + ErrorStr + "\n";
}
else
{
ErrorStr = "\n" + DateTime.Now.ToString("yyyy-MMdd-HHmmss") + "\n" + ErrorStr + "\n";
}
blob.Properties.ContentType = "text/html";
blob.UploadText(ErrorStr);
}
}
這裡面剛好就有用到之前所說的,怎樣判斷Blob是否存在,因為是設計成一個小時為單位,
所以總不可能複寫可能存在的紀錄吧。
複習一下:
public static class BlobExtensions
{
public static bool Exists(this CloudBlob blob)
{
try
{
blob.FetchAttributes();
return true;
}
catch (StorageClientException e)
{
if (e.ErrorCode == StorageErrorCode.ResourceNotFound)
{
return false;
}
else
{
throw;
}
}
}
}