using Microsoft.Extensions.Logging;
namespace LazyBear.MCP.Services.Logging;
///
/// ILoggerProvider, направляющий все логи в .
///
[ProviderAlias("InMemory")]
public sealed class InMemoryLoggerProvider(InMemoryLogSink sink) : ILoggerProvider
{
public ILogger CreateLogger(string categoryName) =>
new InMemoryLogger(sink, categoryName);
public void Dispose() { }
}
internal sealed class InMemoryLogger(InMemoryLogSink sink, string category) : ILogger
{
public IDisposable? BeginScope(TState state) where TState : notnull => null;
public bool IsEnabled(LogLevel logLevel) => logLevel != LogLevel.None;
public void Log(
LogLevel logLevel,
EventId eventId,
TState state,
Exception? exception,
Func formatter)
{
if (!IsEnabled(logLevel)) return;
var message = formatter(state, exception);
var entry = new LogEntry(
DateTimeOffset.Now,
logLevel,
category,
message,
exception?.ToString());
sink.Add(entry);
}
}