private async Task EnsureLoggersAsync(CancellationToken cancellationToken) { if (_loggersSet) { return; } IStorageAccount dashboardAccount = await _storageAccountProvider.GetDashboardAccountAsync(cancellationToken); IStorageAccount storageAccount = await _storageAccountProvider.GetStorageAccountAsync(cancellationToken); IFunctionInstanceLogger traceWriterFunctionLogger = new TraceWriterFunctionInstanceLogger(_trace); if (dashboardAccount != null) { // Create logging against a live Azure account. IStorageBlobClient dashboardBlobClient = dashboardAccount.CreateBlobClient(); IPersistentQueueWriter<PersistentQueueMessage> queueWriter = new PersistentQueueWriter<PersistentQueueMessage>(dashboardBlobClient); PersistentQueueLogger queueLogger = new PersistentQueueLogger(queueWriter); _hostInstanceLogger = queueLogger; FunctionStatusLogger functionStatusLogger = new FunctionStatusLogger(_hostIdProvider, storageAccount.CreateBlobClient()); _functionInstanceLogger = new CompositeFunctionInstanceLogger(queueLogger, traceWriterFunctionLogger, functionStatusLogger); _functionOutputLogger = new BlobFunctionOutputLogger(dashboardBlobClient); } else { // No auxillary logging. Logging interfaces are nops or in-memory. _hostInstanceLogger = new NullHostInstanceLogger(); _functionInstanceLogger = traceWriterFunctionLogger; _functionOutputLogger = new ConsoleFunctionOutputLogger(); } _loggersSet = true; }
public FunctionStatusLoggerTests() { Mock<IStorageBlobClient> blobClientMock = new Mock<IStorageBlobClient>(MockBehavior.Strict); blobClientMock.Setup(p => p.GetContainerReference(HostContainerNames.Hosts)).Returns(_containerMock.Object); _logger = new FunctionStatusLogger(new FixedHostIdProvider(_hostId), blobClientMock.Object); }