-1

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

Mukil Deepthi
  • 6,072
  • 13
  • 71
  • 156

1 Answers1

0
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();                
    }
}
Mukil Deepthi
  • 6,072
  • 13
  • 71
  • 156