Search code examples
c#-4.0azure-blob-storagelinqtocsv

How to save CSV logs in Azure AppendBlob


How to store csv logs to Azure AppendBlob without affecting any perfomance?

My code to write csv to memory stream:

public static byte[] WriteCsvWithHeaderToMemory<T>(IEnumerable<T> records) where T : class
{
    var outputFileDescription = new CsvFileDescription
    {
        SeparatorChar = ',',
        EnforceCsvColumnAttribute = true,
    };

    using (var memoryStream = new MemoryStream())
    {
        using (var streamWriter = new StreamWriter(memoryStream))
        {
            var context = new CsvContext();
            context.Write(records, streamWriter, outputFileDescription);
        }
        return memoryStream.ToArray();                
    }
}

Thanks


Solution

  • public async Task WriteToAudit<T>(T logData)
    {
        var list = new List<T> {logData};
    
        var appendBlob = GetAppendBlobReference();
        appendBlob.FetchAttributes();
    
        var auditDataBytes = WriteCsvWithHeaderToMemory(list,appendBlob.Properties.Length);
    
        using (var stream = new MemoryStream(auditDataBytes))
        {
            await appendBlob.AppendBlockAsync(stream).ConfigureAwait(false);
        }
    }
    
    public static byte[] WriteCsvWithHeaderToMemory<T>(IEnumerable<T> records, long blobSize) where T : class
    {
        var outputFileDescription = new CsvFileDescription
        {
            SeparatorChar = ',',
            EnforceCsvColumnAttribute = true,
            FirstLineHasColumnNames = blobSize <= 0 
        };
    
        using (var memoryStream = new MemoryStream())
        {
            using (var streamWriter = new StreamWriter(memoryStream))
            {
                var context = new CsvContext();
                context.Write(records, streamWriter, outputFileDescription);
            }
            return memoryStream.ToArray();                
        }
    }