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);
コード例 #2
0
        /// <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();
        }