2014-12-03 66 views
1

當使用WindowsAzure.Storage訪問存儲分析日誌時,我收到了解析異常。Azure存儲分析日誌解析錯誤

這是我的檢索日誌記錄代碼:

var recordList = this.SourceAnalyticsClient.ListLogRecords(
    this.Service, this.StartTime, null, this.Configuration.BlobRequestOptions, 
    this.CreateOperationContext()) 
    .ToList(); 

該代碼引發以下異常:

錯誤解析日誌記錄:無法解析「週三,03日 - 12月14格式爲:dddd,dd-MMM-yy HH:mm:ss'GMT'(類型InvalidOperationException)
異常堆棧跟蹤:
at Microsoft.WindowsAzure.Storage.Anal ytics.LogRecordStreamReader.ReadDateTimeOffset(字符串格式)
在Microsoft.WindowsAzure.Storage.Analytics.LogRecord.PopulateVersion1Log(LogRecordStreamReader讀取器)
在Microsoft.WindowsAzure.Storage.Analytics.LogRecord..ctor(LogRecordStreamReader讀取器)

我猜這是因爲我的線程沒有使用英語文化。

我需要一種方法來解決此問題或解決方法。

回答

1

在投資了這一點之後,我發現LogRecordStreamReader.ReadDateTimeOffset指定了一個null格式提供程序參數爲DateTimeOffset.TryParseExact。這意味着該線程的當前文化將被使用 - 而這對於使用非英語文化的線程將無效。

可能的解決方法是:

// Remember current culture setting 
CultureInfo originalThreadCulture = Thread.CurrentThread.CurrentCulture; 

try 
{ 
    // Assign the invariant culture temporarily 
    Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture; 

    // Let WindowsAzure.Storage parse log records 
    recordList = this.SourceAnalyticsClient.ListLogRecords(
     this.Service, this.StartTime, null, this.Configuration.BlobRequestOptions, 
     this.CreateOperationContext()) 
     .ToList(); 
} 
finally 
{ 
    // Restore original culture setting 
    Thread.CurrentThread.CurrentCulture = originalThreadCulture; 
} 

我還創建了一個pull request with a suggested fix