Я провожу некоторые эксперименты с Blazor и хочу настроить ведение журнала. Я вижу, что Blazor регистрируется в Microsoft.Extensions.Logging из коробки и что сообщения журнала отправляются на консоль разработчика внутри браузера. Это хорошее начало.
Теперь я хочу попробовать записать сообщения и в другие пункты назначения. Это может быть облачный сервис. Мне интересно, где это настроить. В ASP.NET Core вы можете настроить его, используя метод ConfigureLogging
в Program.cs
. Но это не доступно с Blazor:
public static IWebAssemblyHostBuilder CreateHostBuilder(string[] args) =>
BlazorWebAssemblyHost.CreateDefaultBuilder()
.UseBlazorStartup<Startup>()
.ConfigureLogging(...); // <- compile error
Как запасной вариант, я пытаюсь настроить его через ConfigureServices
в Startup.cs
:
public void ConfigureServices(IServiceCollection services)
{
services.AddLogging(builder => builder
.AddMyLogger()
.SetMinimumLevel(LogLevel.Information));
}
с помощью AddMyLogger
:
public static ILoggingBuilder AddMyLogger(this ILoggingBuilder builder)
{
builder.Services.AddSingleton<ILoggerProvider, MyLoggerProvider>();
return builder;
}
и MyLoggerProvider
:
public class MyLoggerProvider : ILoggerProvider
{
public ILogger CreateLogger(string categoryName)
{
return new MyLogger();
}
public void Dispose()
{
}
}
и MyLogger
:
public class MyLogger : ILogger
{
public MyLogger()
{
}
public IDisposable BeginScope<TState>(TState state)
{
return null;
}
public bool IsEnabled(LogLevel logLevel)
{
return true;
}
public void Log<TState>(LogLevel logLevel, EventId eventId, TState state, Exception exception, Func<TState, Exception, string> formatter)
{
}
}
Метод AddMyLogger
называется, но мойlogger никогда не создается или получает Log
-calls.
Я что-то здесь не так делаю или регистрация в Blazor WebAssembly просто еще не готова?