2

我正在用 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方法被调用,但我的记录器从未创建或接收任何Log-calls。

我在这里做错了什么还是使用 Blazor WebAssembly 登录还没有准备好?

4

1 回答 1

0

我正在尝试类似的东西。在我的例子中,MyLogger 中的 Log 方法被调用;但是它在以下代码行失败

using (var streamWriter = new StreamWriter(fullFilePath, true)) //Fails here 
{
    streamWriter.WriteLine(logRecord);
} 

当我把它放在 try catch 块中时,我得到了异常“无法评估儿童”。在研究时,我遇到了以下链接。史蒂夫桑德森的回应可能对这种行为有意义

读取本地文件 #16156

顺便说一句,已经很久了,请让我知道您提出的解决方案。

于 2020-09-11T22:17:56.570 回答