如何在 Azure AppendBlob 中保存 CSV 日志
How to save CSV logs in Azure AppendBlob
如何在不影响任何性能的情况下将 csv 日志存储到 Azure Append Blob?
我将 csv 写入内存流的代码:
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();
}
}
谢谢
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();
}
}
如何在不影响任何性能的情况下将 csv 日志存储到 Azure Append Blob?
我将 csv 写入内存流的代码:
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();
}
}
谢谢
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();
}
}