| File: tests\Shared\Logging\TestSink.cs | Web Access |
| Project: src\tests\Aspire.Dashboard.Tests\Aspire.Dashboard.Tests.csproj (Aspire.Dashboard.Tests) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using System.Collections.Concurrent; namespace Microsoft.Extensions.Logging.Testing; public class TestSink : ITestSink { private ConcurrentQueue<BeginScopeContext> _scopes; private ConcurrentQueue<WriteContext> _writes; public TestSink( Func<WriteContext, bool>? writeEnabled = null, Func<BeginScopeContext, bool>? beginEnabled = null) { WriteEnabled = writeEnabled; BeginEnabled = beginEnabled; _scopes = new ConcurrentQueue<BeginScopeContext>(); _writes = new ConcurrentQueue<WriteContext>(); } public Func<WriteContext, bool>? WriteEnabled { get; set; } public Func<BeginScopeContext, bool>? BeginEnabled { get; set; } public IProducerConsumerCollection<BeginScopeContext> Scopes { get => _scopes; set => _scopes = new ConcurrentQueue<BeginScopeContext>(value); } public IProducerConsumerCollection<WriteContext> Writes { get => _writes; set => _writes = new ConcurrentQueue<WriteContext>(value); } public event Action<WriteContext>? MessageLogged; public event Action<BeginScopeContext>? ScopeStarted; public void Write(WriteContext context) { if (WriteEnabled == null || WriteEnabled(context)) { _writes.Enqueue(context); } MessageLogged?.Invoke(context); } public void Begin(BeginScopeContext context) { if (BeginEnabled == null || BeginEnabled(context)) { _scopes.Enqueue(context); } ScopeStarted?.Invoke(context); } public static bool EnableWithTypeName<T>(WriteContext context) { return context.LoggerName?.Equals(typeof(T).FullName) == true; } public static bool EnableWithTypeName<T>(BeginScopeContext context) { return context.LoggerName?.Equals(typeof(T).FullName) == true; } }