【问题标题】:Set up logging with Blazor WebAssembly使用 Blazor WebAssembly 设置日志记录
【发布时间】:2020-02-21 12:39:33
【问题描述】:

我正在使用 Blazor 进行一些实验,并希望设置日志记录。我看到 Blazor 记录到 Microsoft.Extensions.Logging 开箱即用,并且日志消息转到浏览器内的开发人员控制台。这是一个好的开始。

现在我也想尝试将消息记录到其他目的地。它可能是一个云服务。我想知道在哪里设置。在 ASP.NET Core 中,您可以使用 Program.cs 中的 ConfigureLogging 方法进行设置。但这不适用于 Blazor:

public static IWebAssemblyHostBuilder CreateHostBuilder(string[] args) =>
    BlazorWebAssemblyHost.CreateDefaultBuilder()
        .UseBlazorStartup<Startup>()
        .ConfigureLogging(...); // <- compile error

作为后备,我正在尝试通过ConfigureServices in 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-调用。

我在这里做错了什么还是使用 Blazor WebAssembly 进行日志记录还没有准备好?

【问题讨论】:

  • 能否请您使用记录器代码和AddMyLogger
  • 我觉得你也需要注册自己的logger工厂
  • 我已经更新了帖子。
  • 你看过这些吗?他们可能会有所帮助nblumhardt.com/2019/11/serilog-blazorgithub.com/BlazorExtensions/Logging
  • @ColinBacon 是的,我有。现在使用 Blazor.Extensions.Logging。在服务器端工作得很好。不确定它在 WebAssembly 中是否有效?

标签: asp.net-core logging blazor blazor-webassembly


【解决方案1】:

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

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

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

Reading local files #16156

顺便说一句,好久不见,请告诉我你想出的解决方案。

【讨论】:

    猜你喜欢
    • 2021-01-22
    • 1970-01-01
    • 2012-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-14
    • 2016-11-27
    • 2022-12-19
    相关资源
    最近更新 更多