public async Task Consume_BufferFull_FlushedToTableStorage(int bufferSize) { var consumer = new TableStorageLoggerConsumer(_blockingCollection, _cloudTableMock, 10000, bufferSize); var consumerTask = consumer.Start(); for (int i = 0; i < bufferSize; i++) { _blockingCollection.Add(new LogTableEntity("", "", "", null, "", "")); } _blockingCollection.CompleteAdding(); await Task.WhenAny(consumerTask, Task.Delay(5000)); await _cloudTableMock.ReceivedWithAnyArgs().ExecuteBatchAsync(default);
/// <summary> /// Provides <see cref="ILogger"/> instances that log to Azure Table Storage /// </summary> public TableStorageLoggerProvider(TableStorageLoggerConfiguration configuration) { _configuration = configuration ?? throw new ArgumentNullException(nameof(configuration)); _loggers = new ConcurrentDictionary <string, ILogger>(); _logEventQueue = new BlockingCollection <LogTableEntity>(Constants.MaximumBufferSize); var cloudAccount = CloudStorageAccount.Parse(configuration.ConnectionString); var cloudTableClient = cloudAccount.CreateCloudTableClient(); var loggingTableReference = cloudTableClient.GetTableReference(configuration.TableName); var consumer = new TableStorageLoggerConsumer(_logEventQueue, loggingTableReference, _configuration.LogEventBufferTimeoutInSeconds, _configuration.LogEventBufferSize); consumer.Start(); }